首页 文章

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

提问于
浏览
0

我写了一个存储过程:

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为空pragma引发返回选择更新,则使用<< begin close current delete delete lock insert open rollback) savepoint set sql execute commit forall merge pipe purge符号“(”代替“ALTER TABLE”继续 .

2 回答

  • 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

    一个命令在一个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;
    

相关问题