我在表 A 上有一个更新后触发器(触发器 A),它可以对表 B 进行更改。
我在表 B 上还有一个更新后触发器(触发器 B),它没有进行任何更改,但查询表 A 以对非规范化进行一些健全性检查。
所以触发器 B 可以触发以下两种方式之一:
- 如果我直接更新表 B,或者
- 如果我更新表 A 并且触发器 A 触发,导致表 B 更新。
在案例 2 中,我得到一个 ORA-04091: table name is mutating, trigger/function may not see it error。这似乎是正确的。
我想在触发器 B 中检查表 A 是否“处于错误状态”并提前退出(在这种情况下不需要运行健全性检查)。
在我的触发器中测试它的最佳方法是什么?只需添加一个吞下异常的异常处理程序?还有比这更优雅的吗?