我剛開始使用觸發器,如果??新的 tauxHoraire 比當前的 tauxHoraire 大 50%(所以 *1.5 >),我希望觸發器給我訊息錯誤。
觸發器編譯,但我得到ORA-04091: table name is mutating, trigger/function may not see it. 我寫的方式可能有問題。還是其他地方的問題?
CREATE OR REPLACE TRIGGER restrictionTarifHoraire
BEFORE UPDATE ON RESSOURCESPROJET FOR EACH ROW
DECLARE taux_horaire RESSOURCESPROJET.prixHeure%TYPE;
BEGIN
Select ressourcesprojet.prixHeure into taux_horaire from ressourcesprojet where prixheure=:new.prixHeure;
IF taux_horaire > (:NEW.prixHeure * 1.5)
THEN
RAISE_APPLICATION_ERROR(-20002, 'Err, new tauxHoraire cant be > than 50% of the current tauxHoraire');
END IF;
END;
我的測驗:
UPDATE RESSOURCESPROJET
SET prixHeure = 800
WHERE RESSOURCESPROJET.idProjet=3;
uj5u.com熱心網友回復:
這是當 prixHeure 大于 (1.5 * current prixHeure) 時將引發錯誤的觸發器。
CREATE OR REPLACE TRIGGER restrictionTarifHoraire
BEFORE UPDATE ON RESSOURCESPROJET FOR EACH ROW
DECLARE
taux_horaire RESSOURCESPROJET.prixHeure%TYPE;
BEGIN
IF
:OLD.prixHeure*1.5 <:NEW.prixHeure
THEN
RAISE_APPLICATION_ERROR(-20002, 'Err, new tauxHoraire cant be > than 50% of the current tauxHoraire');
END IF;
END;
樣本:
create table RESSOURCESPROJET (idProjet number,prixHeure number);
insert into RESSOURCESPROJET values (3,100);
UPDATE RESSOURCESPROJET
SET prixHeure = 800
WHERE RESSOURCESPROJET.idProjet=3;
錯誤:
Error starting at line : 68 in command -
UPDATE RESSOURCESPROJET
SET prixHeure = 800
WHERE RESSOURCESPROJET.idProjet=3
Error report -
ORA-20002: Err, new tauxHoraire cant be > than 50% of the current tauxHoraire
ORA-06512: at "RESTRICTIONTARIFHORAIRE", line 7
ORA-04088: error during execution of trigger 'RESTRICTIONTARIFHORAIRE'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467501.html
上一篇:Oracle-值更改的天數
