PL/SQL table 突变和触发格式
PL/SQL table mutation and trigger Format
我刚开始使用触发器,如果新的 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;
这是当 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'
我刚开始使用触发器,如果新的 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;
这是当 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'