我想编写一个 SQL 脚本,在创建表/序列之前检查表/序列是否存在。
我尝试了 Google 并找到了一些适用于其他人但不适用于我的解决方案:
方法一:
SELECT *
FROM tableA
WHERE EXISTS
(SELECT * from tableB);
这与 select
语句一起使用。然后我尝试使用创建表语句:
CREATE TABLE "SMEADM"."JXTEST" (
"ACCOUNTSENTRYID" BIGINT NOT NULL )
IN "DATATBSP"
WHERE EXISTS
(SELECT * from tableB);
这会遇到错误 42601
。
方法二:
CREATE TABLE IF NOT EXISTS "SMEADM"."JXTEST" (
"ACCOUNTSENTRYID" BIGINT NOT NULL )
IN "DATATBSP" ;
这也让我遇到错误 42601
。
方法三:
begin
declare continue handler for sqlstate '42710' begin end;
execute immediate 'CREATE TABLE "SMEADM"."JXTEST" (
"ACCOUNTSENTRYID" BIGINT NOT NULL )
IN "DATATBSP"';
end
这也让我遇到错误 42601
。
请指教。
最佳答案
正确的方法是你的第三个选项,但是你必须正确地写它。如果您阅读输出消息,就会发现存在无效字符(42601 SQL 状态)。这是由于没有结束字符的字符串。您不能拥有多行字符串,而必须创建多行并将它们连接起来。
当我运行时:
begin
declare continue handler for sqlstate '42710' begin end;
execute immediate 'CREATE TABLE "SMEADM"."JXTEST" ('
|| ' "ACCOUNTSENTRYID" BIGINT NOT NULL ) '
|| 'IN "DATATBSP"';
end
我得到了:
begin
declare continue handler for sqlstate '42710' begin end;
execute immediate 'CREATE TABLE "SMEADM"."JXTEST" ('
db2 (cont.) => db2 (cont.) => db2 (cont.) => || ' "ACCOUNTSENTRYID" BIGINT NOT NULL ) ' ;
db2 (cont.) => end@
DB20000I The SQL command completed successfully.
关于sql - 如果不存在则创建表语法 db2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804758/