Modifier la valeur insérée avec le déclencheur
-
21-12-2019 - |
Question
Je viens de commencer à apprendre SQL il y a quelques semaines et j'essaie de créer un déclencheur qui change la valeur insérée en 10 si elle est inférieure à 10.J'ai cherché pendant 4h maintenant et j'ai trouvé beaucoup de réponses mais aucune n'était bonne (pour moi).Je ne comprends vraiment pas où est le problème.Voici le code :
CREATE OR REPLACE TRIGGER NumberOfBooks
BEFORE INSERT
ON Book
FOR EACH ROW
BEGIN
IF new.nobook < 10
THEN
SET new.nobook = 10;
END IF;
END;
La solution
Dans la syntaxe de déclenchement d'Oracle, l'enregistrement nouvellement inséré est référencé par :new
, pas new
(notez les deux points).En plus, SET
fait partie d'une instruction de mise à jour, et non un moyen de définir les valeurs des champs - celles-ci sont effectuées par de simples affectations, mais notez que celles-ci sont effectuées avec :=
plutôt que =
.
Ainsi, votre déclencheur devrait lire :
CREATE OR REPLACE TRIGGER NumberOfBooks
BEFORE INSERT
ON book
FOR EACH ROW
BEGIN
IF :new.nobook < 10
THEN
:new.nobook := 10;
END IF;
END;