Oracle: триггер обновления дерева - PullRequest
1 голос
/ 11 августа 2011

Допустим, у меня есть таблица с ID и PARENT_ID.

Я хочу создать триггер «при обновлении», поэтому всякий раз, когда ID обновляется, любой PARENT_ID, который указывает на то, что ID также обновляется.

Однако основная проблема, с которой я могу столкнуться, заключается в том, что я не думаю, что Oracle позволяет вам выбирать из таблицы, для которой в данный момент выполняется триггер.

Я знаю, что могу просто обернуть код "обновления" в функцию PL / SQL, но у меня есть пользователи, которым, вероятно, более удобно манипулировать этими данными только с помощью SQL.

Какой лучший способ добиться того, чего я добиваюсь, не заставляя пользователя обращаться с большим количеством PL / SQL (очевидно, я рад реализовать его с PL / SQL, если он достаточно прозрачен для пользователя).

Ответы [ 3 ]

1 голос
/ 11 августа 2011

вам нужен пакет и два триггера.

первый триггер - after update for each row.Он сохраняет идентификаторы, которые были обновлены в глобальной переменной пакета.

второй триггер это after update trigger (without for each row).Этот триггер может обновить parent_id для идентификаторов из глобальной переменной пакета

1 голос
/ 10 сентября 2011

В итоге я достиг этого, основав представление на таблице, а затем сделав его обновляемым с помощью триггера instead of. Это вместо триггера сделал соответствующие обновления id s и parent_id s в базовой таблице.

1 голос
/ 11 августа 2011

даже PL / SQL, вложенный в триггер, вызовет здесь мутацию.

это звучит как проблема нормализации. Зачем вам нужно обновить другую строку? я бы посоветовал взглянуть на это значение, которое вы поддерживаете, и переместить его в другую таблицу ...

есть также не обязательно рекомендуемый способ иногда обходить законные мутации ... PRAGMA AUTONOMOUS_TRANSACTION - я оставлю это вам, чтобы посмотреть это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...