[英]how to alter disable or enable trigger with ORACLE JOB SCHEDULER
在作业调度程序的job_action中,我具有以下SQL
'BEGIN
ALTER TRIGGER AFTERIUDSETTLEMENTS DISABLE;
ALTER TRIGGER AFTERIUDLIQUIDATIONSDETAILS DISABLE;
UPDATE APPOINTSOFCAS A SET INLD = (SELECT COUNT(*) FROM LIQUIDATIONSDETAILS LD WHERE A.CUSTOMERID = LD.CUSTOMERID AND A.ID = LD.APPOINTOFCAID AND A.KINDCONTROLID = LD.KINDCONTROLID);
UPDATE APPOINTSOFCAS A SET INSD = (SELECT COUNT(*) FROM SETTLEMENTS S WHERE A.CUSTOMERID = S.CUSTOMERID AND A.ID = S.APPOINTOFCAID AND A.KINDCONTROLID = S.KINDCONTROLID);
COMMIT;
ALTER TRIGGER AFTERIUDSETTLEMENTS ENABLE;
ALTER TRIGGER AFTERIUDLIQUIDATIONSDETAILS ENABLE;
END;'
但是运行后,作业失败,并出现以下错误:
ORA-06550: γραμμή 2, στήλη 29:
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 pipe
οριστική διαγραφή
可以在作业调度程序中禁用或启用触发器?
ALTER语句是DDL,这意味着如果不使用EXECUTE IMMEDIATE ,就不能在PL / SQL块的范围内完成它。
这是非常不寻常的,这意味着您的触发器在每个会话中都处于禁用状态,因此,如果发生其他情况,它们将不会触发任何更改。 有可能,但这只是感觉不对。
您也可以在一个语句中进行两次更新,这将提高效率。
begin
execute immediate 'alter trigger afteriudsettlements disable';
execute immediate 'alter trigger afteriudliquidationsdetails disable';
update appointsofcas a
set inld = ( select count(*)
from liquidationsdetails ld
where a.customerid = ld.customerid
and a.id = ld.appointofcaid
and a.kindcontrolid = ld.kindcontrolid )
, insd = ( select count(*)
from settlements s
where a.customerid = s.customerid
and a.id = s.appointofcaid
and a.kindcontrolid = s.kindcontrolid );
commit;
execute immediate 'alter trigger afteriudsettlements enable';
execute immediate 'alter trigger afteriudliquidationsdetails enable';
end;
/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.