假设我有一张包含ID
和PARENT_ID
的表格。
我想创建一个“on update”触发器,因此每当更新ID
时,任何指向PARENT_ID
的{{1}}也会更新。
我可以看到的主要问题是,我认为Oracle不允许您从当前正在执行触发器的表中进行选择。
我知道我可以将“更新”代码包装在PL / SQL函数中,但我的用户可能更容易用SQL操作这些数据。
在不强迫用户调用PL / SQL的情况下,实现我所追求的目标的最佳方法是什么(我很乐意用PL / SQL实现它,只要它对用户来说相当透明)。
答案 0 :(得分:1)
即使PL / SQL嵌套到触发器中也会导致突变。
这听起来像是一个规范化问题。为什么你需要更新另一行?我建议看看你正在维护的价值,然后把它移到另一张桌子......
还有一种不一定推荐的方式来有时绕过合法的突变... PRAGMA AUTONOMOUS_TRANSACTION
- 我会留给你看看:)
答案 1 :(得分:1)
你需要一个包和两个触发器。
第一个触发器是after update for each row
。它保存了包全局变量中更新的id。
第二个触发器是after update trigger (without for each row)
。此触发器可以从包全局变量
答案 2 :(得分:1)
我最终通过在表上创建视图然后使用instead of
触发器使视图可更新来实现此目的。而不是触发器对基表中的id
和parent_id
进行了适当的更新。