【发布时间】:2013-09-26 00:01:47
【问题描述】:
我在执行触发器时遇到问题。我在下面提供了 1 个触发器的代码。
create or replace
TRIGGER abc_tr01
BEFORE INSERT
ON tablename
FOR EACH ROW
BEGIN
UPDATE tablename
SET dtCreatedDate = SYSDATE
WHERE incidentid = ( SELECT :NEW.incidentid
FROM DUAL );
END;
这个触发器应该更新 tablename 表的 1 列 ( dtCreatedDate ) 并在该表上执行插入之前将 SYSDATE 存储在其中。
但是,它无法更新 dtCreatedDate 字段。
我已检查触发器是否已启用。它也在插入时被解雇。我通过在触发代码中注入语法错误来检查这一点。
我使用的是 SQL Developer 3.0。
请帮忙。
【问题讨论】:
-
如果触发器的
on子句中的tablename和update语句中的tablename相同,则不需要在触发器主体中发出update语句。只需使用要为其分配值的列的:new限定符。:new.dtCreatedDate := SYSDATE -
当它被解雇时,你肯定会遇到“*table is mutating”错误。