Partie II
Programmation procédurale
274
© Éditions Eyrolles
Si aucune condition n’est vérifiée, l’ajout se réalise sans aucun changement. Le test de ce
déclencheur est le suivant. On remarque que les quatre premiers INSERT sont inchangés, alors
que les deux derniers sont modifiés (mais pas annulés !).
Tableau 7-26 Déclencheur simulant un CHECK
Déclencheur
Commentaires
BEGIN
IF (
= 'CDB' AND (
<1000)) THEN
SET
:= 'COPI';
END IF;
IF (NEW.grade = 'CDB' AND (
>4000)) THEN
SET
:= 'INST';
END IF;
IF (NEW.grade = 'COPI' AND (
>1000)) THEN
SET
:= 'CDB';
END IF;
IF (
= 'INST' AND (
<3000))
OR (
<100) THEN
SET
:= NULL;
END IF;
END;
Déclaration de l’événement
déclencheur.
Corps du déclencheur.
Test des conditions et mise à
jour éventuelle de la nouvelle
valeur à insérer au niveau de
la colonne grade.
Web
CREATE TRIGGER TrigInsGrade
BEFORE INSERT ON Pilote FOR EACH ROW
NEW.grade
NEW.nbHVol
NEW.grade
NEW.nbHVol
NEW.grade
NEW.nbHVol
NEW.grade
NEW.grade
NEW.nbHVol
NEW.nbHVol
NEW.grade
Tableau 7-27 Test du déclencheur BEFORE INSERT
Insertions valides
Insertions non valides
INSERT INTO Pilote VALUES
('PL-1','Daniel Vielle',1000,'CDB');
INSERT INTO Pilote VALUES
('PL-2','Benoit Treihlou',450,'COPI');
INSERT INTO Pilote VALUES
('PL-3','Pierre Filoux',9000,'INST');
INSERT INTO Pilote VALUES
('PL-4','Philippe Minier',1000,'COPI');
INSERT INTO Pilote VALUES
('PL-5','Trop jeune',
);
INSERT INTO Pilote VALUES
('PL-6','Inexperimente',
);
SELECT * FROM Pilote;
+--------+-----------------+---------+-------+
| brevet | nom
| nbHVol | grade |
+--------+-----------------+---------+-------+
| PL-1
| Daniel Vielle
| 1000.00 | CDB
|
| PL-2
| Benoit Treihlou | 450.00 | COPI |
| PL-3
| Pierre Filoux
| 9000.00 | INST |
| PL-4
| Philippe Minier | 1000.00 | COPI |
| PL-5
| Trop jeune
|
|
| PL-6
| Inexperimente
|
|
+--------+-----------------+---------+-------+
100,'CDB'
2999,'INST'
100.00 | COPI
2999.00 | NULL
Programmation procédurale
274
© Éditions Eyrolles
Si aucune condition n’est vérifiée, l’ajout se réalise sans aucun changement. Le test de ce
déclencheur est le suivant. On remarque que les quatre premiers INSERT sont inchangés, alors
que les deux derniers sont modifiés (mais pas annulés !).
Tableau 7-26 Déclencheur simulant un CHECK
Déclencheur
Commentaires
BEGIN
IF (
= 'CDB' AND (
<1000)) THEN
SET
:= 'COPI';
END IF;
IF (NEW.grade = 'CDB' AND (
>4000)) THEN
SET
:= 'INST';
END IF;
IF (NEW.grade = 'COPI' AND (
>1000)) THEN
SET
:= 'CDB';
END IF;
IF (
= 'INST' AND (
<3000))
OR (
<100) THEN
SET
:= NULL;
END IF;
END;
Déclaration de l’événement
déclencheur.
Corps du déclencheur.
Test des conditions et mise à
jour éventuelle de la nouvelle
valeur à insérer au niveau de
la colonne grade.
Web
CREATE TRIGGER TrigInsGrade
BEFORE INSERT ON Pilote FOR EACH ROW
NEW.grade
NEW.nbHVol
NEW.grade
NEW.nbHVol
NEW.grade
NEW.nbHVol
NEW.grade
NEW.grade
NEW.nbHVol
NEW.nbHVol
NEW.grade
Tableau 7-27 Test du déclencheur BEFORE INSERT
Insertions valides
Insertions non valides
INSERT INTO Pilote VALUES
('PL-1','Daniel Vielle',1000,'CDB');
INSERT INTO Pilote VALUES
('PL-2','Benoit Treihlou',450,'COPI');
INSERT INTO Pilote VALUES
('PL-3','Pierre Filoux',9000,'INST');
INSERT INTO Pilote VALUES
('PL-4','Philippe Minier',1000,'COPI');
INSERT INTO Pilote VALUES
('PL-5','Trop jeune',
);
INSERT INTO Pilote VALUES
('PL-6','Inexperimente',
);
SELECT * FROM Pilote;
+--------+-----------------+---------+-------+
| brevet | nom
| nbHVol | grade |
+--------+-----------------+---------+-------+
| PL-1
| Daniel Vielle
| 1000.00 | CDB
|
| PL-2
| Benoit Treihlou | 450.00 | COPI |
| PL-3
| Pierre Filoux
| 9000.00 | INST |
| PL-4
| Philippe Minier | 1000.00 | COPI |
| PL-5
| Trop jeune
|
|
| PL-6
| Inexperimente
|
|
+--------+-----------------+---------+-------+
100,'CDB'
2999,'INST'
100.00 | COPI
2999.00 | NULL
