0% ont trouvé ce document utile (0 vote)
0 vues4 pages

CCTL3 Programmation SQL

Transféré par

christ.itoua
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues4 pages

CCTL3 Programmation SQL

Transféré par

christ.itoua
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

CCTL 3 – Programmation SQL :

Déclencheurs & Trigger Functions


Compétences visées : les déclencheurs (C1) ; la trigger function (C2). CCTL du 10 juillet 2026.

1. Rappels rapides
Le langage SQL comprend :

 LDD (langage de définition de données) : CREATE, ALTER, DROP


 LMD (langage de manipulation de données) : INSERT, UPDATE, DELETE, SELECT
 Une contrainte est une règle qui limite le type de données insérables dans une table
(PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK…)

2. Les déclencheurs (triggers)


Un déclencheur (trigger) est un bloc de code associé à une table (ou une vue), qui s'exécute
automatiquement en réaction à un évènement de modification des données survenant sur cette
table.

À quoi ça sert :

 automatiser des actions (calculer ou mettre à jour une valeur dérivée)


 maintenir l'intégrité et la cohérence des données au-delà de ce que les contraintes
classiques permettent
 historiser ou journaliser des opérations (table d'audit)
 interdire certaines opérations selon des règles métier complexes

Caractéristiques d'un trigger :

Caractéristique Valeurs possibles


Moment de déclenchement BEFORE (avant l'opération) · AFTER (après
l'opération) · INSTEAD OF (sur une vue)
Évènement déclencheur INSERT · UPDATE · DELETE (TRUNCATE selon
le SGBD)
Portée FOR EACH ROW (une fois par ligne affectée) ·
FOR EACH STATEMENT (une seule fois pour
toute la requête)
3. La trigger function (fonction déclencheur)
Sous PostgreSQL (et d'autres SGBD avancés), la logique d'un trigger n'est pas écrite directement
dans l'instruction qui le crée : elle est encapsulée dans une fonction dédiée, la trigger function,
que l'on associe ensuite à une table.

Étapes de création :

1. Créer la trigger function avec CREATE FUNCTION … RETURNS TRIGGER AS $$ … $$


LANGUAGE plpgsql;
2. Lier cette fonction à une table avec CREATE TRIGGER … EXECUTE FUNCTION nom_fonction();

Particularités d'une trigger function :

 elle ne prend aucun argument en entrée


 elle retourne le type spécial TRIGGER
 elle accède aux enregistrements concernés via deux pseudo-variables : NEW (le nouvel
enregistrement, disponible pour INSERT et UPDATE) et OLD (l'ancien enregistrement,
disponible pour UPDATE et DELETE)
 elle doit se terminer par un RETURN : RETURN NEW; pour laisser passer l'opération (utile en
BEFORE), RETURN OLD; (souvent en DELETE), ou RETURN NULL; pour annuler l'opération (en
BEFORE)
 la variable spéciale TG_OP contient le type d'opération en cours ('INSERT', 'UPDATE',
'DELETE')

4. Syntaxe générale
-- 1. Créer la trigger function
CREATE FUNCTION nom_fonction()
RETURNS TRIGGER AS $$
BEGIN
-- logique métier
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 2. Créer le trigger et le lier à la fonction


CREATE TRIGGER nom_trigger
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON nom_table
FOR EACH {ROW | STATEMENT}
EXECUTE FUNCTION nom_fonction();

5. Exemples pratiques (tables Bachelier, Etablissement, Filière, Postuler)

Exemple 1 — Contrôler une valeur avant insertion (BEFORE INSERT)


CREATE FUNCTION verifier_moyenne()
RETURNS TRIGGER AS $$
BEGIN
IF [Link] < 0 OR [Link] > 20 THEN
RAISE EXCEPTION 'La moyenne doit être comprise entre 0 et 20';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_verifier_moyenne


BEFORE INSERT OR UPDATE ON Bachelier
FOR EACH ROW
EXECUTE FUNCTION verifier_moyenne();

Exemple 2 — Journaliser une suppression (AFTER DELETE)


CREATE TABLE Bachelier_archive (
numBach INT,
nom VARCHAR(20),
date_suppression TIMESTAMP DEFAULT NOW()
);

CREATE FUNCTION archiver_bachelier()


RETURNS TRIGGER AS $$
BEGIN
INSERT INTO Bachelier_archive(numBach, nom)
VALUES ([Link], [Link]);
RETURN OLD;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_archiver_bachelier


AFTER DELETE ON Bachelier
FOR EACH ROW
EXECUTE FUNCTION archiver_bachelier();

Exemple 3 — Mettre à jour un attribut automatiquement (BEFORE UPDATE)


CREATE FUNCTION maj_date_modif()
RETURNS TRIGGER AS $$
BEGIN
NEW.date_modification := NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_maj_date_modif


BEFORE UPDATE ON Bachelier
FOR EACH ROW
EXECUTE FUNCTION maj_date_modif();

6. Supprimer un trigger / une trigger function


DROP TRIGGER nom_trigger ON nom_table;
DROP FUNCTION nom_fonction();
7. Bonnes pratiques
 documenter le rôle de chaque trigger (nom explicite)
 éviter les triggers en cascade non maîtrisés (risque de boucle infinie)
 préférer BEFORE pour valider ou modifier une donnée avant son enregistrement, AFTER
pour déclencher une action externe (journalisation, notification)
 un trigger reste invisible dans le code applicatif : à utiliser avec parcimonie et à bien tester

Vous aimerez peut-être aussi