【发布时间】:2012-01-05 23:58:16
【问题描述】:
好的,我是 Oracle PL/SQL 的新手,偶然发现了一个我无法弄清楚的问题。 我有一个过程可以将数据从一个表传输到另一个表,还有一个触发器在插入第二个表时激活。我使用 DBMS_JOB.SUBMIT 安排了该程序每分钟运行一次(用于测试 - 一旦我弄清楚了就会每天运行一次) - 预定的部分运行良好,但是在程序完成后触发器未触发。我尝试使用插入子句之前和之后,但它仍然无法正常工作。如果我直接调用该过程,它会起作用,并且它会触发触发器就好了。所以......我已经想知道预定的程序是否可以触发触发器?!
这是日程安排的代码:
DECLARE
VJOBN BINARY_INTEGER;
BEGIN
DBMS_JOB.SUBMIT(
JOB => VJOBN,
INTERVAL => 'SYSDATE + 1/2880',
WHAT => 'BEGIN my_procedure(); END;'
);
END;
create or replace TRIGGER TO_PRJ
AFTER INSERT ON PROJECTS
FOR EACH ROW
BEGIN
IF INSERTING
THEN DBMS_OUTPUT.PUT_LINE('INSERTED PROJECT WITH ID: '||:NEW.PROJECT_ID||')
END IF;
END;
表 PROJECTS 有 ID 号、名称 varchar2 和其他一些不重要的。 该过程将 ID 和名称从订单传输到项目。
附:我正在使用http://apex.oracle.com,当我从中获取时间戳时,时间实际上比我晚了 6 个小时 - 不确定它是否有任何意义......
【问题讨论】:
-
Oracle 作业将照常进行。无需担心触发。如果您在存储过程或表中设置触发器,它将照常运行。顺便说一句,你为什么把“存在与结束”放在What子句中?
-
@ppshein 好吧...我担心触发器,因为当作业调用存储过程时它不会运行。我把存在结束的东西,因为这就是我在我读过的一个教程中看到的 - 不再记得是哪一个,搜索了十亿试图找出它。