Plsql ORA-04091:表名正在发生变化

Plsql ORA-04091:表名正在发生变化,plsql,triggers,Plsql,Triggers,将数据插入表A时,我发现ORA-04091错误。表A记录引用了同一表1中的其他记录:N。 父记录的fk_id=null,子记录的fk not 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;

将数据插入表A时,我发现ORA-04091错误。表A记录引用了同一表1中的其他记录:N。 父记录的fk_id=null,子记录的fk not 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:表名正在变化,触发器/函数可能看不到它

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

您知道问题出在哪里,所以只需稍微阅读一下代码:您将更新放置触发器的同一个表

我想在你的例子中,你只需要把
:NEW.actuals:=current\u timestamp
,而不使用update语句