Oracle
 sql >> Base de données >  >> RDS >> Oracle

Empêcher le déclenchement d'insertion

J'ai eu une conversation avec un professeur d'université qui enseignait PL/SQL après avoir fait une présentation lors d'une conférence. Mon exposé portait sur les bonnes pratiques PL/SQL ; une de mes diapositives disait simplement "N'utilisez pas de déclencheurs". Le professeur m'a dit qu'il trouvait ces conseils difficilement conciliables avec les besoins du programme. Ils doivent enseigner toute la syntaxe à leurs étudiants, mais il a admis que souvent ils définissaient des tâches qui exigeaient des solutions que nous n'utiliserions pas lors de l'écriture professionnelle de logiciels.

C'est une telle question. L'approche correcte consiste à utiliser une contrainte de vérification, comme le montre la réponse de Gordon . Les contraintes sont plus efficaces, et idiomatiques aussi. Mais votre professeur veut que vous écriviez un déclencheur, alors voici votre code, corrigé.

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

Points à noter :

  1. CREATE OR REPLACE signifie que nous pouvons modifier le code du déclencheur sans instruction DROP préalable.
  2. BEGIN et END blocs de code d'image tels que les corps de déclencheur.
  3. Les conditions statiques sont encadrées par les mots-clés IF ... END IF ; WHEN sert à quitter les constructions de boucle.
  4. Référencez les valeurs des colonnes du tableau avec les mots-clés :NEW (et :OLD) - notez les deux-points.
  5. Utilisez RAISE_APPLICATION_ERROR pour lancer une exception ; le numéro d'erreur doit être compris entre -20999 et -20000 qu'Oracle réserve aux exceptions définies par l'utilisateur.
  6. Donnez du sens à votre message d'erreur :dites à vos utilisateurs ce qu'ils ont fait de mal au lieu de leur faire deviner.
  7. Apprenez à utiliser l'indentation pour rendre votre code lisible. Vos futurs collègues vous en remercieront.