Sql 如果存在等效的DB2 Drop表

Sql 如果存在等效的DB2 Drop表,sql,db2,sql-drop,Sql,Db2,Sql Drop,如果DB2表存在,我需要删除它,或者删除并忽略错误 select tabname from syscat.tables where tabschema='myschema' and tabname='mytable' 如果它返回了什么,你的问题 drop table myschema.mytable 另一种可能是只发出drop命令,并捕获如果表不存在将引发的异常。只需将该代码放在该方法的try{…}catch Exception e{//Ignore}块中。试试这个: IF EXISTS (

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

select tabname from syscat.tables where tabschema='myschema' and tabname='mytable'
如果它返回了什么,你的问题

drop table myschema.mytable
另一种可能是只发出drop命令,并捕获如果表不存在将引发的异常。只需将该代码放在该方法的try{…}catch Exception e{//Ignore}块中。

试试这个:

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

搜索systable:如果您使用的是as400 power i,system i,则系统表名称为QSYS2.systable,否则请尝试sysibm.systable或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  ; 

下面的代码适用于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

这更简单,对我来说也适用:

DROP TABLE SCHEMA.TEST IF EXISTS;

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

从information_schema.tables中选择*,其中TABLE_schema='MY_schema'和TABLE_NAME='MY_TABLE'; 然后,如果返回任何结果:

DROP TABLE MY_SCHEMA.MY_TABLE;
你在什么背景下运行这个?如果您正在执行脚本,则可能无法使用必要的功能。如果您是从更高的级别/应用程序RPG、Java、C等执行此操作,这通常是微不足道的。看看这是否有帮助:try/catch不好,因为异常可能不是由于缺少表造成的,但由于某些约束正在引用此表,因此在删除这些约束之前无法删除该表。@mvmn:DB2至少我知道的版本总是进行级联删除。因此,任何FK都将悄然被丢弃,不管怎样,您也应该考虑架构名称,否则,表名称可能存在于另一个模式中,而不是在您的模式中,并且您可能还想检查它是否是一个表而不是一个视图。DB2不支持这种编程流控制,这种语法仅适用于DB2LUW11.5及更高版本。因此,如果您尝试在旧版本上使用此语法,即在几乎所有当前安装的DB2LUW安装上使用此语法,那么它将失败。