sql - 仅当表存在时才删除表,或忽略删除错误
问题描述
我有一个表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
解决方案
这是一个常见问题解答
有不止一种方法可以做到这一点。
如果找不到表,您可以在脚本中使用复合 SQL 与 SQLSTATE 的 continue-handler 对应的错误,但这要求您还使用替代语句分隔符,如下所示
--#SET TERMINATOR @
set current schema myschema@
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
BEGIN end;
EXECUTE IMMEDIATE 'DROP TABLE MYLOG';
END @
CREATE TABLE MYLOG(... )@
您还可以更改 abort-on-first-error 逻辑(如果您在通过命令行运行脚本时使用 +s)。update command options using s off
您可以通过(在出错时继续)或update command options using s on
在出错时中止来动态更新脚本中的 Db2 CLP 选项。
推荐阅读
- react-native - React Native - 在没有 Internet 连接的情况下将数据存储在本地 DB/AsyncStorage 中?
- reactjs - Nextjs中的未知帮助程序createSuper错误
- reactjs - 使用 useEffect 更新 JSX 变量“每次重新渲染后丢失”问题
- python - 是否有停止在 Python 中打印某些内容的功能?
- reactjs - How to load multiple components at same time in reactJs?
- uitableview - Why the cellForRowAt method is not getting called
- python - Cannot save animation: no writers available
- bash - 如何将字符串附加到 Bash 目录中所有文件的所有行?
- c# - Unrecognized option '--useSqlite'
- java - 如何使用 Java Comparator 按字符串中的最后一个字符排序?