sql – ORACLE更新后触发:解决ORA-04091变异表错误

我正在尝试创建一个触发器:

  create or replace trigger NAME_OF_TRIGGER
  after insert or update on table1
  REFERENCING OLD AS OLD NEW AS NEW
  for each row

在更新/插入表格时自动填写几个非强制字段.

这需要我使用从table2和table1(触发器的主题)中选择的游标.

有没有办法避免变异表错误而不使用临时表值或自治事务?

最佳答案

“Is there any way to avoid the mutating table error without using a
temporary table for values or an autonomous transaction?”

tl;博士没有.

变异表错误是由查询拥有触发器的表或与拥有表的外键关系中涉及的表(至少在旧版本的数据库中,不确定它是否仍然获得)引起的.

在设计合理的应用程序中,这不是必需的.这就是为什么许多人将变异表视为数据建模不良的指标.例如,突变通常与标准化不足有关.

用Jamie Zawinski来解释:有些人在遇到变异表异常时,会想“我知道,我会使用自治交易”.现在他们有两个问题.

有时,只需在BEFORE INSERT或UPDATE触发器中修改:NEW值或使用虚拟列即可避免错误.但是你需要发布更多细节,看看这些是否适用.

但最好的解决方法是不需要任何其他类型.

转载注明原文:sql – ORACLE更新后触发:解决ORA-04091变异表错误 - 代码日志