16

I need to drop a DB2 table if it exists, or drop and ignore errors.

4

6 回答 6

9

试试这个:

IF EXISTS (SELECT name FROM sysibm.systables WHERE name = 'tab_name') THEN
DROP TABLE tab_name;END IF;
于 2017-04-03T10:02:46.790 回答
4

在 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  ; 
于 2017-04-24T09:27:19.357 回答
4

下面在 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
于 2019-11-06T20:30:38.420 回答
3

这更简单,对我有用:

DROP TABLE SCHEMA.TEST IF EXISTS;
于 2020-07-01T08:21:01.203 回答
2

首先查询表是否存在,比如

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

如果它返回一些问题你的

drop table myschema.mytable

其他可能性是只发出 drop 命令并捕获如果表不存在将引发的异常。只需将该代码放入该方法的 try {...} catch (Exception e) { // Ignore } 块中。

于 2011-11-26T12:14:23.683 回答
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;
于 2021-04-16T14:46:47.743 回答