【问题标题】:Triggers not working on Oracle SQL Developer触发器在 Oracle SQL Developer 上不起作用
【发布时间】: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子句中的tablenameupdate语句中的tablename相同,则不需要在触发器主体中发出update语句。只需使用要为其分配值的列的:new 限定符。 :new.dtCreatedDate := SYSDATE
  • 当它被解雇时,你肯定会遇到“*table is mutating”错误。

标签: sql oracle triggers


【解决方案1】:

不需要UPDATE 声明:

create or replace
TRIGGER abc_tr01
  BEFORE INSERT
  ON tablename
  FOR EACH ROW
BEGIN
  :new.dtCreatedDate := sysdate;
END;
/

【讨论】:

  • 感谢大家的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多