2011-11-25 16 views
6

Tôi cần phải thả một bảng DB2 nếu nó tồn tại hoặc thả và bỏ qua các lỗi.Bảng thả xuống DB2 nếu tồn tại tương đương

+0

Bạn đang sử dụng ngữ cảnh này trong bối cảnh nào? Nếu bạn đang thực hiện một kịch bản, các khả năng cần thiết _may_ không có sẵn. Nếu bạn đang làm điều này từ một cấp độ cao hơn/ứng dụng (RPG, Java, C#, vv), điều này thường là tầm thường. –

+0

Xem điều này có giúp ích không: http://bytes.com/topic/db2/answers/509144-drop-table-view-only-if-exists –

+0

Tôi làm điều đó trên JAVA –

Trả lời

1

truy vấn đầu tiên nếu bàn tồn tại, như

select tabname from syscat.tables where tabschema='myschema' and tabname='mytable' 

và nếu nó trả về một cái gì đó vấn đề của bạn

drop table myschema.mytable 

Khả năng khác là chỉ cần thực hiện lệnh thả và bắt ngoại lệ đó sẽ được nâng lên nếu bảng không tồn tại. Chỉ cần đặt mã đó bên trong khối try {...} catch (Exception e) {// Ignore} cho phương thức đó.

+0

Thử/nắm bắt không tốt bởi vì ngoại lệ có thể không phải do sự vắng mặt của bảng, nhưng do thực tế một số ràng buộc đang tham chiếu đến bảng này và nó không thể bị loại bỏ cho đến khi những ràng buộc đó bị loại bỏ. – mvmn

+0

@mvmn: DB2 (ít nhất là các phiên bản tôi biết) luôn luôn có một "tầng" thả. Vì vậy, bất kỳ FK nào cũng sẽ tự động bị xóa –

1

Hãy thử này:

IF EXISTS (SELECT name FROM sysibm.systables WHERE name = 'tab_name') THEN 
DROP TABLE tab_name;END IF; 
+0

Bạn cũng nên xem xét tên lược đồ, nếu không, tên bảng có thể tồn tại trong một lược đồ khác, nhưng không tồn tại trong lược đồ của bạn và ngoại lệ sẽ được ném. –

+0

Và bạn cũng có thể muốn kiểm tra xem đó là một bảng (và không phải là một cái nhìn). –

+0

DB2 không hỗ trợ loại điều khiển luồng có lập trình này – user119588

0

tìm kiếm trên systable: nếu bạn đang ở trên AS400 (i điện, hệ thống i) tên bảng hệ thống được QSYS2.SYSTABLES khác thử sysibm.systables hoặc SYSCAT.TABLES (Đây phụ thuộc vào hệ điều hành)

BEGIN  
IF EXISTS (SELECT NAME FROM QSYS2.SYSTABLES WHERE TABLE_SCHEMA = 'YOURLIBINUPPER' AND TABLE_NAME = 'YOUTABLENAMEINUPPER') THEN   
    DROP TABLE YOURLIBINUPPER.YOUTABLENAMEINUPPER;        
END IF;               
END ;