© Éditions Eyrolles
273
chapitre n° 7
Programmation avancée
SELECT ACTION_STATEMENT FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA='bdsoutou' AND EVENT_OBJECT_TABLE='Qualifications'
AND EVENT_MANIPULATION='UPDATE' AND ACTION_TIMING='AFTER';
+-----------------------------------------------------------------------------+
| ACTION_STATEMENT
|
+-----------------------------------------------------------------------------+
|BEGIN
UPDATE Pilote SET nbQualif = nbQualif + 1 WHERE brevet = NEW.brevet;
UPDATE Pilote SET nbQualif = nbQualif - 1 WHERE brevet = OLD.brevet;
END
|
+-----------------------------------------------------------------------------+
Remarquons que MySQL utilise la colonne ACTION_STATEMENT pour contenir le corps du
déclencheur (visible aussi par SHOW TRIGGERS).
La colonne ACTION_ORIENTATION est pour l’instant toujours évaluée à 'ROW' (déclencheur
d’état pas encore opérationnel).
Les colonnes ACTION_REFERENCE_OLD_ROW et ACTION_REFERENCE_NEW_ROW contiennent,
pour l’instant, toujours respectivement 'OLD' et 'NEW' (il n’est pas encore possible de renommer
ces identificateurs).
Dans le but d’être davantage en phase avec la norme dans les prochaines versions, les colonnes suivantes contiennent, pour l’heure, toujours la valeur NULL : TRIGGER_CATALOG, EVENT_
OBJECT_CATALOG, ACTION_CONDITION, ACTION_REFERENCE_OLD_TABLE, ACTION_
REFERENCE_NEW_TABLE, et CREATED. Les deux premières colonnes sont relatives à la notion
de catalogue, la suivante a la possibilité de conditionner un déclencheur (clause WHEN d’Oracle), la dernière contiendrait le moment de création du déclencheur.
Programmation d’une contrainte de vérification
Nous avons vu que les contraintes de vérification (CHECK) ne sont pas encore prises en
charge. Nous avons étudié au chapitre 5 la possibilité d’en programmer à l’aide de vues. Ici,
nous allons créer un déclencheur s’en chargeant. Attention, il n’est pas toujours possible
d’utiliser un déclencheur pour valider une contrainte de vérification.
Considérons l’exemple du chapitre 5 (Figure 5-10. Vue simulant la contrainte CHECK) qui
décrit la table Pilote et la contrainte vérifiant qu’un pilote :
q
ne peut être commandant de bord qu’à la condition qu’il ait entre 1 000 et 4 000 heures de
vol ;
q
ne peut être copilote qu’à la condition qu’il ait entre 100 et 1 000 heures de vol ;
q
ne peut être instructeur qu’à partir de 3 000 heures de vol.
Le tableau suivant décrit le code du déclencheur. Ici, on choisit de forcer la valeur de la
colonne grade pour conserver la cohérence avec les conditions initiales.
Précédent

- 295/418

Suivant