仅当 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
然后创建
我有一个 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
然后创建