如果存在等效的DB2 Drop表

时间:2011-11-25 15:05:46

标签: sql db2 sql-drop

如果DB2表存在,我需要删除它,或者删除并忽略错误。

6 个答案:

答案 0 :(得分:6)

试试这个:

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

答案 1 :(得分:2)

首先查询表是否存在,如

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

如果它返回了什么问题你的

drop table myschema.mytable

其他可能性是发出drop命令并捕获将在表不存在时引发的Exception。只需将该代码置于try {...} catch(Exception e){// Ignore}块中,即可实现该方法。

答案 2 :(得分:2)

搜索systable:如果您使用的是as400(power i,system i),系统表名称为QSYS2.SYSTABLES,请尝试sysibm.systables或syscat.tables(这取决于操作系统)

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

答案 3 :(得分:1)

为了补充这里的其他答案,如果您想与 ANSI 兼容,您还可以使用下面的查询。它应该适用于 IBM i 和 LUW:

SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA = 'MY_SCHEMA' AND TABLE_NAME = 'MY_TABLE';

然后如果返回任何结果:

DROP TABLE MY_SCHEMA.MY_TABLE;

答案 4 :(得分:0)

以下内容在DB2中为我工作,该DB2查询SYSCAT.TABLES视图以检查表是否存在。如果是,它将准备并执行DROP TABLE语句。

BEGIN    
   IF EXISTS (SELECT TABNAME FROM SYSCAT.TABLES WHERE TABSCHEMA = 'SCHEMA_NAME' AND TABNAME = 'TABLE_NAME') THEN 
      PREPARE stmt FROM 'DROP TABLE SCHEMA_NAME.TABLE_NAME';
      EXECUTE stmt;
   END IF;                                                        
END

答案 5 :(得分:0)

这更简单并且对我有用:

DROP TABLE SCHEMA.TEST IF EXISTS;