« Déclencheur » = bloc PL/SQL qui s'exécute automatiquement en réponse à un événement.
Créer un trigger qui prévienne d'une suppression dans la table client :
create trigger avant_supp_cli
before delete on client
begin
dbms_output.put_line('je supprime un client');
end;
Explication : Ce trigger avant_supp_cli est un trigger "before delete" qui s'exécute avant chaque suppression dans la table client. Il affiche un message indiquant qu'un client va être supprimé.
Créer un trigger qui agit en cas de baisse du prix :
CREATE OR REPLACE TRIGGER post_maj_prix
AFTER UPDATE ON article
FOR EACH ROW
WHEN (:OLD.prixht IS NOT NULL AND :NEW.prixht IS NOT NULL AND :OLD.prixht > :NEW.prixht)
BEGIN
-- Affiche l'ancien prix après mise à jour
DBMS_OUTPUT.PUT_LINE('Ancien prix : ' || TO_CHAR(:OLD.prixht));
END;
/
Explication : Ce trigger post_maj_prix est un trigger "after update" qui s'exécute après chaque mise à jour de la table article. Il vérifie si le nouveau prix (new.prixht) est inférieur à l'ancien prix (old.prixht), et si c'est le cas, affiche le prix précédent.
create [or replace] trigger nom
before | after
insert | update [of col] | delete | insert or delete
| ... or ...
on table
[ for each row ]
[ when ( ... ) ]
bloc PL/SQL
Remarques :
[or replace]
: permet de recréer un trigger sans le supprimer au préalable.before | after
: indique si le trigger doit s'exécuter avant ou après l'action DML.for each row
: s'applique à chaque ligne affectée par l'action DML.when
: condition optionnelle pour déclencher le trigger seulement dans certains cas.Pourquoi apprendre cela ? : Cela permet de rendre les applications plus robustes et de mieux contrôler les erreurs de données.
select * from cliant
ORA-942
: table or view does not exist (erreur typique due à une faute d'orthographe
dans le nom de table)ORA-1
: constraint violated : unique (tentative d'insertion d'une valeur déjà existante
dans une colonne unique)Importance : Comprendre les erreurs permet de renforcer la validation et la fiabilité des opérations en base de données.
raise_application_error(n, msg)
: instruction pour lever une erreur personnalisée
n
: numéro d'erreur entre -20000 et -20999 (doit être unique et compréhensible pour
identifier l'erreur)msg
: message décrivant l'erreur (doit être explicite pour l'utilisateur)Utilité : Permet de définir des messages d'erreur précis et de contrôler comment les erreurs sont gérées dans l'application.
ORA-942
ou ORA-1
, est levée et empêche l'exécution de
l'action DML.Un trigger peut donc automatiser la gestion de ces règles, même si elles ne peuvent pas être directement imposées par le modèle SQL.