Answers:
导致表格错误的最可能原因是触发器的滥用。这是一个典型的例子:
这是正常现象,这是正常现象,由于Oracle保证:
编写此类触发器时,最有可能希望查询(2)看到插入(1)的行。由于更新尚未完成(可能要插入更多行),因此这与以上两点都矛盾。
Oracle 可以返回与语句开始之前的时间点一致的结果,但是从我看到的大多数尝试实现该逻辑的示例中,人们将多行语句视为一系列连续步骤的一部分,并且期望语句[2],以查看先前步骤所做的更改。Oracle无法返回预期结果,因此会引发错误。
进一步的阅读:Ask Tom上的“ muting table”。
如果我怀疑突变表错误的原因是触发器,则避免该错误的一种方法是将逻辑从触发器移到过程中。
一个变异表时的声明导致触发器触发和触发器引用导致触发器表中出现。避免此类问题的最佳方法是不使用触发器,但我怀疑DBA没有花时间去做。他本可以执行以下任一操作: