ДО TRIGGER вызывает ORA-04091 - PullRequest
       11

ДО TRIGGER вызывает ORA-04091

0 голосов
/ 24 октября 2019

Я только начал с SQL и у меня возникла проблема: я хотел написать триггер «До обновления», но когда я пытаюсь обновить таблицу, я всегда получаю эту ошибку (ORA-04091). Я действительно не понимаю, почему;так как я думал, что триггер до обновления не имеет проблем с измененными таблицами.

 BEFORE UPDATE ON ORD
 FOR EACH ROW
 DECLARE
 shipping2 varchar(10);
 BEGIN
 SELECT SHIPDATE into shipping2 
 FROM ORD 
 WHERE ORDID = :old.ORDID;

 IF (shipping2 is not NULL) then
    raise_application_error(20121,'ORDER already on the way!!!');
 end if;

 END;
-------------------------------------------------------

UPDATE ORD
SET TOTAL = 222
WHERE ORDID = 603;



1 Ответ

0 голосов
/ 24 октября 2019

Эта ошибка указывает на то, что вы не можете запросить таблицу, по которой сработал триггер, внутри самого триггера.

Но в вашем случае использования кажется, что вам не нужно запрашивать таблицу. Если вы хотите получить доступ к текущему значению столбца SHIPDATE в записи, которая должна быть обновлена, вы можете просто использовать :OLD.SHIPDATE.

Так что-то вроде:

BEFORE UPDATE ON ORD
FOR EACH ROW
BEGIN
    IF (:old.SHIPDATE IS NOT NULL) THEN
        RAISE_APPLICATION_ERROR(20121,'ORDER already on the way!!!');
    END IF;

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