DB2 DROP AND CREATE TABLE

问题描述:

我试图确保当我运行一个存储过程时,它检查一个表是否存在,如果它存在,则删除它然后重新创建表。使用以下存储的procDB2 DROP AND CREATE TABLE

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 

现在上面标记的点** - >>不受数据工作室欢迎。我不确定这个说法有什么问题。请帮助

+0

为什么不创建PK作为CREATE TABLE的一部分? – 2011-01-09 17:21:18

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

EXECUTE IMMEDIATE 'drop table AELUM.ROOTNODES';