我有一个表MYLOG
,想在使用下面的SQL脚本创建表之前尝试删除它。
如果该表尚不存在,则会引发以下错误。
如果表不存在,如何避免这个错误?
该模式已在较早的脚本中设置,而该脚本在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
答案 0 :(得分:1)
这是一个常见问题解答
有多种方法可以做到这一点。
您可以在脚本中使用带有SQL的continue-handler的复合SQL,以应对与未找到表时得到的错误相对应的SQLSTATE,但这要求您还使用如下所示的替代语句定界符
--#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选项。
答案 1 :(得分:0)
通过使用此查询
select tabname from syscat.tables where
tabschema='myschema' and tabname='MYLOG'
检查架构中的表
如果存在则
drop table myschema.MYLOG
然后创建