【发布时间】: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