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'