我写了一个存储过程:
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
COMMIT;
END test1;
但是我在编译期间遇到以下错误,不确定原因。
PLS-00103:遇到以下任何一种情况时遇到符号“ALTER TABLE”:
(如果循环mod,则为goto开始大小写声明结束异常退出 null pragma raise返回选择更新时使用 <<继续关闭当前删除获取锁定 insert open rollback savepoint set sql execute commit forall 合并管道清除
符号“(”代替“ALTER TABLE”继续。
答案 0 :(得分:2)
这应该有效。实际上不需要COMMIT
。 ALTER TABLE
是一个不需要提交的DDL语句。
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
COMMIT;
END test1;
答案 1 :(得分:1)
一个EXECUTE IMMEDIATE中的一个命令
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
END test1;