#oracle #triggers
Вопрос:
код триггера хороший, но при выполнении действия появляется эта ошибка
ошибка ORA-04091: таблица OR_HR.SELL мутирует, триггер/функция может этого не видеть.
код запуска
create or replace TRIGGER "QUALITY_EDIT" AFTER INSERT OR UPDATE ON Sell FOR EACH ROW BEGIN UPDATE DRUG SET QUANTITY = (SELECT (DRUG.QUANTITY - SELL.QUANTITY ) FROM Sell JOIN Drug ON SELL.DRUG_ID = DRUG.DRUG_ID) ; END;
Как я могу решить эту проблему?
Комментарии:
1. ваш триггер связан с той же таблицей, к которой он принадлежит. Когда таблица изменяется , она мутирует. Это незаконно. Вы просто не можете этого сделать
Ответ №1:
Вы не можете выбрать из таблицы, которая только что обновляется (или вставляется), она мутирует, и триггер не может ее видеть.
К счастью, вам не нужно выбирать из sell
, вместо этого используйте что-то вроде этого ( :new
псевдорекорд) :
create or replace trigger quality_edit after insert or update on sell for each row begin update drug d set d.quantity = d.quantity - :new.quantity where d.drug_id = :new.drug_id; end; /