【问题标题】:trigger is giving ORA-04091 error触发器给出 ORA-04091 错误
【发布时间】:2013-05-13 23:39:53
【问题描述】:

我在 table tbl_campboss_report 上有一个插入后触发器,但它给了我 tbl_campboss_report 正在变异,触发器/函数可能看不到它

这是我的触发器:

BEGIN
update tbl_campboss_report c set c.units=(select b.units from tbl_campboss_master b where b.details=:new.details); 

END;

谁能帮我解决这个问题?
提前致谢

【问题讨论】:

  • 您无法更新调用触发器的相同记录,details 是唯一键吗?您是否要更新多条记录?
  • 详情不是PK,我只更新了一条记录
  • 如果您要更新的记录与您刚刚插入的记录相同,请使用@Noel 的answer
  • 如果在插入行的 SQL 中包含该列的填充,这将是一个更有效的操作。该值的来源也将更加明显。当然,根本不填充它并在需要时从 tbl_campboss_master 表中获取值可能会更有效。

标签: oracle triggers ora-04091


【解决方案1】:

考虑将触发器更改为 BEFORE INSERT。您不需要在触发器中编写 UPDATE 语句。只需将值分配给所需的列。

:new.units = <value that you get from the query>;

【讨论】:

猜你喜欢
  • 2018-11-30
  • 1970-01-01
  • 2012-05-17
  • 2017-12-15
  • 1970-01-01
  • 2015-08-03
  • 2012-04-26
  • 1970-01-01
  • 2018-01-02
相关资源
最近更新 更多