Oracle触发器 - 在更新时我需要更新同一个表中的其他行 - 获取mutate错误

时间:2014-05-27 09:00:10

标签: sql oracle triggers mutating-table

作为讨厌的黑客的一部分,我被要求做,我需要修改一个触发器来更新表中的相关记录 - 但是我得到了变异表错误。

数据如下所示:

roster table
Id   person_id  route_id  active_ind
1    1          1         Y
2    2          1         Y
3    3          2         Y
4    4          2         Y  

如果person_id = 1的active_ind设置为N,我需要将与同一路由相关联的其他人的active_id(route_id = 1)也设置为N.

有一个当前触发器(更新后)更新其他路由关联表,工作正常。当我添加以下代码时,我得到了变异表错误:

 update roster r
    set r.active_ind = 'N'
    where r.route_id = :new.route_id
      and r.id != :new.id
      and r.active_ind = 'Y';

这是因为我正在尝试在更新过程中更新表。 有人可以提出解决方案吗?

1 个答案:

答案 0 :(得分:0)

突变表错误是当我们尝试在由于同一个表上的DML语句而触发触发器时操纵表上的行时发生的错误。为避免变异表错误,最好使用 COMPUND TRIGGERS