alter table期间的Oracle存储过程编译错误

时间:2015-12-10 08:15:06

标签: oracle stored-procedures

我写了一个存储过程:

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”继续。

2 个答案:

答案 0 :(得分:2)

这应该有效。实际上不需要COMMITALTER 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;