plsql - ORA-04091 : table name is mutating

标签 plsql triggers

将数据插入表 A 时出现 ORA-04091 错误。表 A 记录正在引用同一表 1:N 中的其他记录。 父记录的 fk_id = null,子记录的 fk 不为 null。

create or replace trigger TRBI_A 
BEFORE INSERT ON A
for each row
BEGIN
  IF :new.fk_id IS NOT NULL then
     UPDATE A SET actualTS = CURRENT_TIMESTAMP WHERE id = :new.fk_id;
  END IF;
END;

ORA-04091: table name is mutating, trigger/function may not see it

该问题可能是由触发器尝试修改或查询当前正在由触发触发器的语句修改的表引起的。 有谁知道如何修改触发器以使其正确?

最佳答案

您知道问题是什么,所以只需稍微阅读一下您的代码:您更新了放置触发器的同一个表。

我想在你的情况下,你只需要输入 :NEW.actualTS:=current_timestamp ,而不使用更新语句。

关于plsql - ORA-04091 : table name is mutating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441167/

相关文章:

mysql 触发器 - 从触发器中选择计数(*)

c# - WPF:按下鼠标左键更改边框的背景颜色

database - Postgresql:如果 View 被修改通知

oracle - 在 Oracle 中,如何验证对象类型层次结构中使用的对象类型?

sql - 如何根据另一列的一部分更新列

mysql - 创建插入后触发器后无法插入表

MySQL 触发器和过程

sql - PL/SQL 中的 Oracle 数据库依赖项

python - 有没有办法使用FORALL从数组中插入数据?

string - 在PLSQL中提取URL路径段字符串