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

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

是否可以在不使用临时表存储值或自主事务的情况下避免变异表错误?

最佳答案

“有什么方法可以避免变异表错误,而无需使用
价值临时表还是自主交易?”

tl;博士

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

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

用杰米·扎温斯基(Jamie Zawinski)的话来解释:有些人在遇到变异表异常时认为:“我知道,我将使用自主事务。”现在他们有两个问题。

有时,可以通过在INSERT或UPDATE触发器之前简单地修改:NEW值或使用虚拟列来避免该错误。但是您需要发布更多详细信息,以查看它们是否适用。

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

08-28 08:54