【问题标题】:How to solve the Oracle DB trigger error?如何解决 Oracle DB 触发器错误?
【发布时间】:2017-01-10 02:34:14
【问题描述】:

我编写了一个数据库触发器来监控插入操作。插入新记录后,我想自动将CREATION_DATE 设置为sysdate

我想插入新记录时出错:

错误
ORA-04091: 表 REPORT 正在变异,触发器/函数可能不会 看看吧
ORA-06512:在“CREATION_DATE_TEST”,第 2 行
ORA-04088: 执行触发器“CREATION_DATE_TEST”期间出错

我的代码:

 CREATE OR REPLACE TRIGGER creation_date_test 
 AFTER INSERT ON REPORT FOR EACH ROW 
 BEGIN  
   UPDATE REPORT set CREATION_DATE = sysdate
   WHERE ROWID = :new.ROWID;
 END;

我还尝试将ROWID = :new.ROWID 替换为PROJECT_ID = new.PROJECT_ID。它会引发同样的错误。

【问题讨论】:

    标签: oracle plsql triggers database-trigger


    【解决方案1】:

    听起来您只需要一个设置 :new.creation_date 的插入前触发器

    create or replace trigger creation_date_test
      before insert on report
      for each row
    begin
      :new.creation_date := sysdate;
    end;
    

    【讨论】:

    • 非常感谢!你的回答真的很有帮助!
    • @deli - creation_datevarchar2 而不是 date 顾名思义?我不希望在我发布的代码中使用任何字符串。
    • 我现在已经更改了数据类型。谢谢!!
    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2016-08-04
    • 2017-06-10
    相关资源
    最近更新 更多