DB2删除并创建表

DB2删除并创建表,db2,sql-pl,Db2,Sql Pl,我试图确保在运行存储过程时,它会检查表是否存在,如果存在,则会删除该表,然后重新创建该表。使用以下存储过程 CREATE PROCEDURE PROCEDURE1 () DYNAMIC RESULT SETS 1 P1: BEGIN if( exists( select 1 from syscat.tables where tabschema = 'AELUM' and tabname = 'ROOTNODES' )) then drop table AELUM.ROOTNODES ; CR

我试图确保在运行存储过程时,它会检查表是否存在,如果存在,则会删除该表,然后重新创建该表。使用以下存储过程

CREATE PROCEDURE PROCEDURE1 ()
DYNAMIC RESULT SETS 1
P1: BEGIN
if( exists(
select 1 from syscat.tables where tabschema = 'AELUM' and tabname = 'ROOTNODES'
)) then

drop table AELUM.ROOTNODES ;

CREATE TABLE "AELUM"."ROOTNODES" (
"UID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 NO CYCLE CACHE 20 NO ORDER ),
"NODENAME" VARCHAR(255),
"HASCHILD" INTEGER,
"CHILDTABLE" VARCHAR(255)
)
DATA CAPTURE NONE;

**-->>ALTER TABLE "AELUM"."ROOTNODES" ADD CONSTRAINT "ROOTNODES_PK" PRIMARY KEY ("UID");

end if;

END P1

现在,DataStudio不喜欢上面标记为**->>的点。我不确定这句话有什么不对。请帮助

不确定DB2,但在Oracle中,您无法在标准PL/SQL中执行DDL。相反,您必须将DDL作为VARCHAR2并执行EXECUTE IMMEDIATE语句

EXECUTE IMMEDIATE 'drop table AELUM.ROOTNODES';

为什么不将PK创建为create表的一部分?是否已将语句分隔符设置为分号以外的值?分号在存储过程中有不同的含义,默认情况下也将其用作语句分隔符是不明确的。它是通过右键单击->设置语句分隔符来定义的。在处理存储过程时,我通常使用@。谢谢。这样,我就可以按如下步骤创建过程过程1动态结果集1 P1:如果存在,则开始从syscat.tables中选择*,其中tabschema='AELUM'和tabname='ROOTNODES',然后删除表AELUM.ROOTNODES;创建表AELUM.ROOTNOTES UID INTEGER NOT NULL默认生成为标识,以1递增1最小值1最大值2147483647无循环缓存20无顺序主键,节点名称VARCHAR255,HASCHILD INTEGER,CHILDTABLE VARCHAR255数据捕获无;如果结束;结束P1我将尝试更改语句分隔符。任何人都可以告诉我如何在db2存储过程中使用ALTER语句。