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;
Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top