Oracle:更新树触发器

时间:2011-08-11 16:06:44

标签: oracle plsql triggers

假设我有一张包含IDPARENT_ID的表格。

我想创建一个“on update”触发器,因此每当更新ID时,任何指向PARENT_ID的{​​{1}}也会更新。

我可以看到的主要问题是,我认为Oracle不允许您从当前正在执行触发器的表中进行选择。

我知道我可以将“更新”代码包装在PL / SQL函数中,但我的用户可能更容易用SQL操作这些数据。

在不强迫用户调用PL / SQL的情况下,实现我所追求的目标的最佳方法是什么(我很乐意用PL / SQL实现它,只要它对用户来说相当透明)。

3 个答案:

答案 0 :(得分:1)

即使PL / SQL嵌套到触发器中也会导致突变。

这听起来像是一个规范化问题。为什么你需要更新另一行?我建议看看你正在维护的价值,然后把它移到另一张桌子......

还有一种不一定推荐的方式来有时绕过合法的突变... PRAGMA AUTONOMOUS_TRANSACTION - 我会留给你看看:)

答案 1 :(得分:1)

你需要一个包和两个触发器。

第一个触发器是after update for each row。它保存了包全局变量中更新的id。

第二个触发器是after update trigger (without for each row)。此触发器可以从包全局变量

更新id的parent_id

答案 2 :(得分:1)

我最终通过在表上创建视图然后使用instead of触发器使视图可更新来实现此目的。而不是触发器对基表中的idparent_id进行了适当的更新。