仅当 table 存在时才丢弃,否则忽略丢弃错误

Drop table only if it exists, or ignore drop error

我有一个 table MYLOG 并且想在使用下面的 SQL 脚本创建它之前尝试删除它。 如果 table 尚不存在,则抛出以下错误。 如果 table 不存在,我如何绕过此错误?

模式在早期脚本中设置,SQL 脚本中不可用:

set current schema MYSCHEMA

SQL 脚本:

DROP TABLE MYLOG;
CREATE TABLE MYLOG (
  TIME_STARTED TIMESTAMP NOT NULL,
  USER_EMAIL VARCHAR(254) NOT NULL,
  CONSTRAINT PK_TIME_STARTED_USER_EMAIL    PRIMARY KEY (TIME_STARTED, USER_EMAIL))  ORGANIZE BY ROW;
COMMIT;

错误:

DROP TABLE MYLOG
SQLError: rc = 0 (SQL_SUCCESS) 
SQLGetDiagRec: SQLState     : S0002
          fNativeError : -204
          szErrorMsg   : [IBM][CLI Driver][DB2/6000] SQL0204N  "MYSCHEMA.MYLOG" is an undefined name.  SQLSTATE=42704

这是一个常见问题解答

有不止一种方法。

您可以在脚本中使用 compound-SQL 并为 SQLSTATE 的继续处理程序提供相应的错误,如果 table 未找到,但是这要求您还使用如下所示的替代语句定界符

--#SET TERMINATOR @

set current schema myschema@

BEGIN
 DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
   BEGIN end;
 EXECUTE IMMEDIATE 'DROP TABLE MYLOG';
END @

CREATE TABLE MYLOG(... )@

您还可以更改第一次出错时中止逻辑(如果您在 运行 通过命令行编写脚本时使用 +s)。您可以通过 update command options using s off(出错时继续)或 update command options using s on 出错时中止来动态更新脚本中的 Db2 CLP 选项。

通过使用此查询

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

检查架构中的 table

如果存在则

drop table myschema.MYLOG

然后创建