Я пытаюсь использовать новое и старое в качестве ссылки в моем триггере, но я не знаю, как решить мою проблему.
CREATE OR REPLACE TRIGGER verifcomglob
AFTER UPDATE OF COMETAT on COMMANDE
REFERENCING NEW AS NEW
DECLARE
V_COMGLOB numeric;
V_COMPROD P.PRODNUM%TYPE;
CURSOR C_COMPROD IS
SELECT P.PRODNUM
FROM COMMANDE CM, COMMANDEGLOBALE CGN, PRODUIT P, CONCERNERGLOB CG, CONCERNER C
WHERE CM.COMNUM = C.COMNUM
AND C.PRODNUM = P.PRODNUM
AND P.PRODNUM = CG.PRODNUM
AND CG.COMGLOBNUM = CGN.COMGLOBNUM
AND CGN.COMGLOBETAT = 'en constitution'
AND CM.COMNUM=:new.COMNUM;
CURSOR C_COMGLOB IS
SELECT CGN.COMGLOBNUM
FROM COMMANDE CM, COMMANDEGLOBALE CGN, PRODUIT P, CONCERNERGLOB CG, CONCERNER C
WHERE CM.COMNUM = C.COMNUM
AND C.PRODNUM = P.PRODNUM
AND P.PRODNUM = CG.PRODNUM
AND CG.COMGLOBNUM = CGN.COMGLOBNUM
AND CGN.COMGLOBETAT = 'en constitution'
AND P.PRODNUM=V_COMPROD
AND CM.COMNUM=:new.COMNUM;
BEGIN
OPEN C_COMPROD;
LOOP
FETCH C_COMPROD INTO V_COMPROD ;
OPEN C_COMGLOB;
LOOP
FETCH C_COMGLOB INTO V_COMGLOB ;
if(C_COMGLOB%ROWCOUNT) != 0 THEN
UPDATE CONCERNERGLOB SET CONCERNERGLOB.qtecom = (CONCERNERGLOB.qtecom + (SELECT CONCERNER.QTECOM FROM CONCERNER, COMMANDE where COMNUM=:new.COMNUM AND PRODNUM=V_COMPROD)) WHERE CONCERNERGLOB.COMGLOBNUM=V_COMGLOB AND CONCERNERGLOB.PRODNUM=V_COMPROD;
ELSE
null;
end if;
END LOOP;
END LOOP;
CLOSE C_COMGLOB ;
END;
Это ошибка Oracle:
- 00000 - «НОВЫЕ или СТАРЫЕ ссылки не допускаются в триггерах уровня таблицы»
* Причина: триггер обращается к «новым» или «старым» значениям в триггере таблицы.
* Действие: Удалить все новые или старые ссылки.