Oracle Trigger - при обновлении мне нужно обновить другие строки в той же таблице - получить ошибку mutate

Как часть неприятного хака, который меня попросили сделать, мне нужно изменить триггер для обновления связанных записей в таблице, но я получаю ошибку мутирующей таблицы.

Данные выглядят так:

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  

Если для параметра active_ind person_id = 1 установлено значение 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';

Это связано с тем, что я пытаюсь обновить таблицу в процессе обновления. Кто-нибудь может предложить решение?


person Dave Tapson    schedule 27.05.2014    source источник
comment
Это на Oracle 11g.   -  person Dave Tapson    schedule 27.05.2014
comment
stackoverflow.com/ вопросы/13492015/   -  person Rohan    schedule 27.05.2014


Ответы (1)


Ошибка таблицы мутаций — это ошибка, возникающая, когда мы пытаемся манипулировать строками в таблице, когда триггер был запущен из-за оператора DML в той же таблице. Чтобы избежать ошибки таблицы мутаций, лучше использовать СОСТАВНЫЕ ТРИГГЕРЫ

person Smart003    schedule 16.09.2014