【问题标题】:dbms_job not executing jobs at regular interval inside triggerdbms_job 未在触发器内定期执行作业
【发布时间】:2017-01-08 21:21:52
【问题描述】:
Create or replace TRIGGER AFT_INSERT_TMP_TBL
AFTER INSERT ON TMP_TBL
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE 

V_SQL   VARCHAR2(1000);
A_NAME  VARCHAR2(100);
l_jobno NUMBER;
BEGIN
A_NAME:='ANY_NAME';

dbms_job.submit( l_jobno,
                 'myProc',
                 sysdate + interval '2' minute,
                 'sysdate + interval ''2'' minute' );
END AFT_INSERT_TMP_TBL;

我有一个触发器,它创建一个dbms_job,之后该作业将每两分钟运行一次。我遇到的问题是触发器多次执行,并且该作业位于队列中,如USER_JOBS 所示,并且永远不会被执行。我无法在触发器中写入commit,因此如何在每两分钟内启动并运行这项工作。

【问题讨论】:

  • 其他作业是否运行?只是想知道这是否是一个关于让工作运行的更广泛的问题。关于commit,大概任何插入该行的东西都会在某个时候提交它。
  • 如果您希望作业在触发器的调用语句回滚的情况下运行,您可以使触发器使用自治事务 - 但这通常是个坏主意。

标签: sql oracle plsql oracle11g triggers


【解决方案1】:

您可以创建一个提交作业的过程。然后触发器可以调用过程。

【讨论】:

    【解决方案2】:

    Oracle 正在做完全正确的事情 - 在提交行之前它不会触发作业。

    你想在这种情况下发生什么?

    insert into tmp_tbl (col1) values ('Wrong value');
    rollback;
    

    我猜你不希望触发任何工作?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多