Qu'est-ce que sont les déclencheurs ?
Oracle offre un riche panel de déclencheurs.
Pour la génération des APIs de tables de ce site, nous avons retenus les 12 déclencheurs obéissant aux 3 jeux de critères ci-après :
- Avant ou après la manipulation de table [BEFORE | AFTER]
- Selon la nature de la manipulation [INSERT | UPDATE | DELETE ]
- Portée de la manipulation [FOR EACH ROW | STATEMENT]
Nous utiliserons ces 12 déclencheurs au niveau de la manipulation des tables.
Pour la manipulation des données au travers des vues, ce que permet Oracle, nous avons retenu les 3 déclencheurs INSTEAD OF obéissant au critère de nature de la manipulation [INSERT | UPDATE | DELETE ]
Nota: Pour spécifier un déclencheur de table au niveau de l'ordre (STATEMENT) , il faut omettre d'écrire la clause FOR EACH ROW.
Exemple de déclencheur
CREATE OR REPLACE TRIGGER Usa_BIR BEFORE
INSERT ON Usages FOR EACH ROW DECLARE vl_newrec Usages%ROWTYPE;
BEGIN
vl_newrec.num := :NEW.num;
vl_newrec.code := :NEW.code;
vl_newrec.libelle := :NEW.libelle;
vl_newrec.descriptif := :NEW.descriptif;
vl_newrec.ordre := :NEW.ordre;
Usa_TAPIs.autogen_column_ins(vl_newrec);
Usa_TAPIs.autogen_column(vl_newrec);
Usa_TAPIs.checktype_column(vl_newrec);
Usa_TAPIs.uppercase_column(vl_newrec);
Usa_TAPIs.column_PEA(vl_newrec);
:NEW.num := vl_newrec.num;
:NEW.code := vl_newrec.code;
:NEW.libelle := vl_newrec.libelle;
:NEW.descriptif := vl_newrec.descriptif;
:NEW.ordre := vl_newrec.ordre;
END;
Le déclencheur ci-dessus intercepte l'insertion d'un nouveau tuple dans la table Usages avant son exécution.
Le mot-clé :NEW retourne le pseudo-enregistrement à insérer. Les parties du pseudo-enregistrement (colonnes de la table) peuvent être modifiées.
Les procédures stockées appelées par le déclencheur traitent le pseudo-enregistrement qu'elles reçoivent en paramètre. Par exemple la procédure autogen_column_ins() génère la valeur de clé primaire pour une table indépendante.