插入oracle后延迟触发器调用

jsr*_*rg1 3 oracle triggers plsql

有没有办法做到这一点?.我发现添加,

DBMS_LOCK.sleep() 
Run Code Online (Sandbox Code Playgroud)

通过谷歌搜索到触发器代码的开头,但它阻止了插件本身的发生.我想插入数据但触发器应该在任意延迟后触发.谢谢.

Ton*_*ews 7

如果我们知道为什么你想要这个延迟,以及延迟触发器应该做什么,这将有所帮助.但是,一种可能性是在触发器中使用DBMS_JOB包来创建在插入后稍微运行的作业.例如:

create trigger trg
after insert on tab
for each row
declare
  jl_ob number;
begin
  dbms_job.submit
    ( job => l_job
    , what => 'myproc(:new.id);'
    , next_date => sysdate+1/24/60 -- One minute later
    );
end;
Run Code Online (Sandbox Code Playgroud)

或者,触发器可以将一行插入特殊表中,并且按计划运行的DBMS_JOB(例如每10分钟)可以处理表中超过X分钟的行.

  • 实际上,在研究使用DBMS_SCHEDULER时,我发现它执行了一个隐式提交,这意味着它不能用于你想让它做一些可能回滚的事情.至于DBMS_JOB被弃用(事实上)Tom Kyte今年说"我不能说除了看到[DBMS_JOB]消失后我会感到非常惊讶,我会立即提交一个bug,如果我收到了没有它的测试版......"(http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:25405608521707).所以我会留下我的答案. (3认同)