3

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

  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(触发器的主题)中选择的游标。

有没有办法在不使用临时表来存储值或自主事务的情况下避免变异表错误?

4

1 回答 1

10

“有没有什么办法可以在不使用临时表来存储值或自主事务的情况下避免变异表错误?”

tl;博士没有。


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

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


套用 Jamie Zawinski 的话说:有些人在遇到 mutating table 异常时会想:“我知道,我会使用自治事务。” 现在他们有两个问题。


有时可以通过简单地修改 BEFORE INSERT OR UPDATE 触发器中的 :NEW 值或使用虚拟列来避免错误。但是您需要发布更多详细信息以查看这些是否适用。

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

于 2011-08-02T16:53:48.593 回答