Partie II
Programmation procédurale
268
© Éditions Eyrolles
En considérant les données initiales des tables, le test de ce déclencheur (réalisé le
20 décembre 2005) sous l’interface de commande est le suivant :
Quand utiliser à la fois les directives NEW et OLD ?
Seuls les déclencheurs de type UPDATE FOR EACH ROW permettent de manipuler à la fois les
directives NEW et OLD. En effet, la mise à jour d’une ligne dans une table fait intervenir une
nouvelle donnée qui en remplace une ancienne. L’accès aux anciennes valeurs se fera par la
notation pointée du pseudo-enregistrement OLD. L’accès aux nouvelles valeurs se fera par NEW.
La figure suivante illustre ce mécanisme dans le cas de la modification de la colonne brevet du
dernier enregistrement de la table Qualifications. Le déclencheur doit programmer deux
mises à jour dans la table Pilote.
Tableau 7-20 Déclencheur après insertion
Déclencheur
Commentaires
BEGIN
UPDATE Pilote SET nbQualif = nbQualif + 1
WHERE brevet =
;
END;
Déclaration de l’événement déclencheur.
Corps du déclencheur.
Mise à jour du pilote concerné par la
qualification.
CREATE TRIGGER TrigInsQualif
AFTER INSERT ON Qualifications
FOR EACH ROW
NEW.brevet
Tableau 7-21 Test du déclencheur AFTER INSERT
Événement déclencheur
Résultat
INSERT INTO
Qualifications VALUES
('PL-2', 'A380',
SYSDATE());
SELECT * FROM Qualifications $
+--------+------+------------+
| brevet | typa | expire
|
+--------+------+------------+
| PL-1
| A340 | 2005-06-22 |
| PL-1
| A330 | 2005-02-05 |
| PL-1
| A320 | 2004-01-16 |
| PL-2
| A320 | 2004-01-18 |
| PL-3
| A330 | 2006-01-22 |
|
|
+--------+------+------------+
SELECT * FROM Pilote$
+--------+-------------+---------+-------+----------+
| brevet | nom
| nbHVol | compa | nbQualif |
+--------+-------------+---------+-------+----------+
| PL-1
| P. Caboche | 450.00 | AF
|
3 |
| PL-2
| G. Lebur
| 3400.00 | AF
|
2 |
| PL-3
| X. Leclercq | 900.00 | SING |
1 |
+--------+-------------+---------+-------+----------+
Web
PL-2
| A380 | 2005-12-20
Programmation procédurale
268
© Éditions Eyrolles
En considérant les données initiales des tables, le test de ce déclencheur (réalisé le
20 décembre 2005) sous l’interface de commande est le suivant :
Quand utiliser à la fois les directives NEW et OLD ?
Seuls les déclencheurs de type UPDATE FOR EACH ROW permettent de manipuler à la fois les
directives NEW et OLD. En effet, la mise à jour d’une ligne dans une table fait intervenir une
nouvelle donnée qui en remplace une ancienne. L’accès aux anciennes valeurs se fera par la
notation pointée du pseudo-enregistrement OLD. L’accès aux nouvelles valeurs se fera par NEW.
La figure suivante illustre ce mécanisme dans le cas de la modification de la colonne brevet du
dernier enregistrement de la table Qualifications. Le déclencheur doit programmer deux
mises à jour dans la table Pilote.
Tableau 7-20 Déclencheur après insertion
Déclencheur
Commentaires
BEGIN
UPDATE Pilote SET nbQualif = nbQualif + 1
WHERE brevet =
;
END;
Déclaration de l’événement déclencheur.
Corps du déclencheur.
Mise à jour du pilote concerné par la
qualification.
CREATE TRIGGER TrigInsQualif
AFTER INSERT ON Qualifications
FOR EACH ROW
NEW.brevet
Tableau 7-21 Test du déclencheur AFTER INSERT
Événement déclencheur
Résultat
INSERT INTO
Qualifications VALUES
('PL-2', 'A380',
SYSDATE());
SELECT * FROM Qualifications $
+--------+------+------------+
| brevet | typa | expire
|
+--------+------+------------+
| PL-1
| A340 | 2005-06-22 |
| PL-1
| A330 | 2005-02-05 |
| PL-1
| A320 | 2004-01-16 |
| PL-2
| A320 | 2004-01-18 |
| PL-3
| A330 | 2006-01-22 |
|
|
+--------+------+------------+
SELECT * FROM Pilote$
+--------+-------------+---------+-------+----------+
| brevet | nom
| nbHVol | compa | nbQualif |
+--------+-------------+---------+-------+----------+
| PL-1
| P. Caboche | 450.00 | AF
|
3 |
| PL-2
| G. Lebur
| 3400.00 | AF
|
2 |
| PL-3
| X. Leclercq | 900.00 | SING |
1 |
+--------+-------------+---------+-------+----------+
Web
PL-2
| A380 | 2005-12-20
