Partie II
Programmation procédurale
260
© Éditions Eyrolles
ayant un même nombre d’heures de vol. Deux solutions s’offrent à vous : dans un sous-bloc
avec EXIT ou dans le même bloc avec un CONTINUE, et une variable pour tester l’éventuelle
redirection.
Afin de déclarer d’autres exceptions, il faut consulter la liste des erreurs dans la documentation
officielle (Appendix B. Error Codes and Messages) de manière à connaître le numéro d’erreur
MySQL (paramètre code_erreur_mysql dans la syntaxe DECLARE HANDLER).
Vous pouvez aussi écrire un bloc qui programme volontairement l’erreur pour voir, sous l’interface de commande, le numéro que MySQL renvoie.
Exceptions nommées
Pour intercepter une erreur MySQL et lui attribuer au passage un identificateur, il faut utiliser
la clause DECLARE CONDITION. La syntaxe est la suivante :
Déclaration
DECLARE nomException CONDITION FOR
{SQLSTATE [VALUE] ‘valeur_sqlstate’ | code_erreur_mysql}
Il est ainsi possible de regrouper plusieurs types d’erreurs (avec SQLSTATE ou cibler une erreur
en particulier en indiquant le code erreur de MySQL). Une fois l’exception nommée, il est possible de l’utiliser dans la déclaration de l’événement associé via la directive DECLARE HANDLER.
Déclenchement
Considérons les deux tables suivantes. La colonne comp de la table Pilote est une clé étrangère vers la table Compagnie. Programmons une procédure qui supprime une compagnie de
code passé en paramètre.
Le tableau suivant décrit la procédure procExceptionNommee qui intercepte une erreur
référentielle (SQLSTATE à 23 000). Il s’agit de contrôler le programme si la compagnie à
détruire est encore rattachée à un enregistrement référencé dans la table Pilote.
Figure 7-5 Deux tables
Compagnie
comp
ville
nomComp
AF
Paris
Air France
SING
Singapour
Singapore AL
CAST
Blagnac
Castanet AL
EJET
Dublin
Easy Jet
Pilote
brevet
nom
nbHVol comp
PL-1
Gilles Laborde
2450
AF
PL-2
Frédéric D'Almeyda
900
AF
PL-3
Florence Périssel
1000
SING
PL-4
Thierry Millan
2450
CAST
PL-5
Christine Royo
200
AF
PL-6
Aurélia Ente
2450
SING
à détruire
Précédent

- 282/418

Suivant