© Éditions Eyrolles
271
chapitre n° 7
Programmation avancée
Appel de sous-programmes
Un déclencheur peut appeler directement par CALL (ou dans son corps) un sous-programme
MySQL.
• Un déclencheur ne peut pas lancer une procédure cataloguée retournant des données au
client (traces avec SELECT) ou utilisant du SQL dynamique (étudié plus loin). En revanche, les
procédures employées peuvent renvoyer des résultats via leurs paramètres de sortie (OUT).
• Les procédures appelées ne peuvent constituer aucune transaction (oubliez donc de pouvoir faire START TRANSACTION, COMMIT, et ROLLBACK).
Le tableau suivant décrit l’utilisation d’un sous-programme (procTrigg) dans un déclencheur (espionAjoutPilote) qui s’exécutera avant chaque ajout d’un nouveau pilote. Le
sous-programme ajoute simplement une ligne dans la table Trace.
CREATE PROCEDURE bdsoutou.procTrigg(IN param DATETIME)
BEGIN
INSERT INTO Trace VALUES
(CONCAT('Insertion pilote, appel de bdsoutou.procTrigg le ',param));
END;
La trace d’exécution en considérant les données initiales des tables est la suivante :
mysql> (INSERT INTO Pilote VALUES ('PL-4', 'C. Soutou', 100, 'AF',0)$
Query OK, 1 row affected (0.04 sec)
mysql> SELECT * FROM Pilote$
+--------+-------------+---------+-------+----------+
| brevet | nom
| nbHVol | compa | nbQualif |
+--------+-------------+---------+-------+----------+
| PL-1
| P. Caboche | 450.00 | AF
|
3 |
| PL-2
| G. Lebur
| 3400.00 | AF
|
1 |
| PL-3
| X. Leclercq | 900.00 | SING |
1 |
|
|
+--------+-------------+---------+-------+----------+
Tableau 7-25 Appel d’un sous-programme dans un déclencheur
Déclencheur
Commentaire
CREATE TRIGGER bdsoutou.espionAjoutPilote
BEFORE INSERT ON Pilote
FOR EACH ROW
BEGIN
END;
Appel dans le corps du déclencheur d’une
procédure MySQL en passant un paramètre
d’entrée.
Web
CALL bdsoutou.procTrigg(SYSDATE());
PL-4
| C. Soutou
| 100.00 | AF
|
0
Précédent

- 293/418

Suivant