【发布时间】:2018-06-10 02:20:17
【问题描述】:
作为 python 脚本的一部分,我正在运行以下 3 个 SQL 语句,以便在其余代码更新主表之前创建备份副本:
DROP TABLE TABLEAU.TESTTABLEJBCOPY;
CREATE TABLE TABLEAU.TESTTABLEJBCOPY LIKE TABLEAU.TESTTABLEJB;
INSERT INTO TABLEAU.TESTTABLEJBCOPY (SELECT * FROM TABLEAU.TESTTABLEJB);
这可以正常工作,除非表 TABLEAU.TESTTABLEJBCOPY 不存在。
我尝试过使用:
CREATE OR REPLACE TABLE TABLEAU.TESTTABLEJBCOPY LIKE TABLEAU.TESTTABLEJB;
INSERT INTO TABLEAU.TESTTABLEJBCOPY (SELECT * FROM TABLEAU.TESTTABLEJB);
但是它一直在拉错误
异常:[IBM][CLI Driver][DB2/LINUXX8664] SQL0104N 在“CREATE OR REPLACE”之后发现了意外的标记“TABLE”。预期的标记可能包括:“TYPE”。 SQLSTATE=42601 SQLCODE=-104
我不知道如何处理。
或者,是否有更好的方法让它在尝试删除表之前检查表是否不存在。
谢谢
【问题讨论】:
-
为什么不直接删除所有行?
-
@ Dan Bracuk 该脚本不一定总是使用这些表运行,因此复制表不会总是存在以从中删除行。因此,为什么我需要创建或替换样式功能。
-
@Josh - Dan 的意思是“在数据库创建期间创建表,然后(如果你使用它),先清除表”。
-
虽然我目前了解您的流程有问题;您一次只能运行一个更新过程,或者得到奇怪的结果。我会考虑做一些事情,比如将快照保存到临时/随机表中,或者在快照表上做一些工作,或者类似的事情。
标签: db2