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
Trả lời
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 đó.
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
@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 –
Hãy thử này:
IF EXISTS (SELECT name FROM sysibm.systables WHERE name = 'tab_name') THEN
DROP TABLE tab_name;END IF;
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. –
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). –
DB2 không hỗ trợ loại điều khiển luồng có lập trình này – user119588
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 ;
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. –
Xem điều này có giúp ích không: http://bytes.com/topic/db2/answers/509144-drop-table-view-only-if-exists –
Tôi làm điều đó trên JAVA –