create or replace procedure Pro_Match1(vxh in varchar2, vcert_id in varchar2)
as
begin 
ALTER TABLE libsys.cert_loss DISABLE CONSTRAINT  fk_cert_los_rel_42744_reader_c;



end
提示出错:
Error: PLS-00103: 出现符号 "ALTER"在需要下列之一时:
        begin case declare exit
          for goto if loop mod null pragma raise return select update
          while with <an identifier>
          <a double-quoted delimited-identifier> <a bind variable> <<
          close current delete fetch lock insert open rollback
          savepoint set sql execute commit forall merge
          <a single-quoted SQL string> pipe
       符号 "lock在 "ALTER" 继续之前已插入。
Line: 21Error: PLS-00103: 出现符号 "CONSTRAINT"在需要下列之一时:
        , in
Line: 21

解决方案 »

  1.   


    create or replace procedure Pro_Match1(vxh in varchar2, vcert_id in varchar2)
    as
    begin 
    EXECUTE IMMEDIATE 'ALTER TABLE libsys.cert_loss DISABLE CONSTRAINT fk_cert_los_rel_42744_reader_c';



    end
      

  2.   

    EXECUTE IMMEDIATE 'ALTER TABLE libsys.cert_loss DISABLE CONSTRAINT fk_cert_los_rel_42744_reader_c';
    EXECUTE IMMEDIATE 'ALTER TABLE libsys.cert_loss enable CONSTRAINT fk_cert_los_rel_42744_reader_c';
    即可
      

  3.   

    PL/SQL的设计方法——早邦定,这样,一个语句块的执行将尽量变快,因为所有的数据库对象在运行前都已经被编译器所确定。这样设计的结果是,DDL语句被禁止使用了。因为DDL语句会修改数据库对象,而数据库对象的权限是在编译期间决定的。
     所以要执行就必须使用动态SQL语句。
    例:
    create or replace procedure Pro_Match1(vxh in varchar2, vcert_id in varchar2)
    as
    begin 
    ALTER TABLE libsys.cert_loss DISABLE CONSTRAINT  fk_cert_los_rel_42744_reader_c;



    end