如何创建一个不会持续整个事务直到完成的触发器?

时间:2017-07-04 07:55:25

标签: oracle plsql triggers

有一个程序在表格的中间插入操作。该表包含一个触发器,因此整个事务处于保持状态。无论如何都要在单独的会话中运行触发器,并且在插入操作过程运行之后无需等待触发器完成。

程序和触发器都是

PRAGMA AUTONOMOUS_TRANSACTION

2 个答案:

答案 0 :(得分:2)

您可以尝试将触发器部分运行为dbms_job ...,如下所示:

CREATE OR REPLACE TRIGGER myrigger
AFTER INSERT
ON mytable  
REFERENCING NEW AS New OLD AS Old
  FOR EACH ROW
  DECLARE
  l_job number;
  begin 
    dbms_job.submit( l_job, 'MYPACKAGE.MYFUNCTION(''' || :new.myField || ''');' );
  END ;
/

答案 1 :(得分:0)

如果Trigger基于插入操作,它将保持当前会话,直到该触发操作完成。这是维护数据库端完整性所必需的。可以设计一个程序&如果要求已知,则以更好的方式触发。