ORA-04091 - Как я могу изменить таблицу, по которой срабатывает триггер? - PullRequest
1 голос
/ 06 декабря 2010

Итак, у меня есть таблица foo, и я хотел бы удалить другие foo строки при срабатывании триггера t_foo:

CREATE OR REPLACE TRIGGER "t_foo" AFTER INSERT OR DELETE OR UPDATE ON foo

/*delete some other records from foo that are not :NEW.* or :OLD.* \*

Как мне поступить, не получив ORA-04091:Имя таблицы меняется, триггер / функция может его не видеть.Это вообще возможно?

Ответы [ 3 ]

8 голосов
/ 06 декабря 2010

Почему бы не сделать это в хранимой процедуре, где вы можете обернуть вставку и удалить в транзакции, и можете четко задокументировать это побочное действие?

6 голосов
/ 06 декабря 2010
2 голосов
/ 06 декабря 2010

Это в основном подразумевает, что в вашей таблице есть взаимозависимые строки, возможно, иерархическая структура с собственной ссылкой из столбца в первичный ключ.Вы думали о ON DELETE CASCADE?

...