я сделал триггер для обновления данных, когда люди совершают действия в форме

#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; /