DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SELECT 'Une erreur est
survenue...';
Et voici une des erreurs qui peut être interceptée par ce gestionnaire :
Code : Console
ERROR 1062 (23000): Duplicate entry '21' for key 'ind_uni_animal_id'
Le message d'erreur est constitué de trois éléments importants :
1062 : le numéro d'erreur MySQL (un nombre entier) ;
23000 : l'identifiant de l'état SQL (une chaîne de 5 caractères) ;
Duplicate entry '21' for key 'ind_uni_animal_id' : un message donnant le détail de l'erreur.
Identifiant de l'état SQL
Dans la procédure ajouter_adoption_continue(), c'est l'identifiant de l'état SQL ('23000') qui a été utilisé.
Il s'agit d'une chaîne de 5 caractères, renvoyée par le serveur au client pour informer de la réussite ou de l'échec d'une
instruction. Un identifiant commençant par '00' par exemple, signifie que l'instruction a réussi. '23000' est l'identifiant
renvoyé lorsqu'une erreur concernant une contrainte (NOT NULL, unicité, clé primaire ou secondaire,…) a été déclenchée.
Pour utiliser cet identifiant dans un gestionnaire d'erreur, il faut le faire précéder de SQLSTATE.
Numéro d'erreur MySQL
Pour utiliser le numéro d'erreur SQL, par contre, il suffit de l'indiquer, comme un nombre entier :
Code : SQL
DECLARE CONTINUE HANDLER FOR 1062 SELECT 'Une erreur est
survenue...';
Ce sont des codes qui, contrairement aux identifiants SQLSTATE, sont propres à MySQL. Ils sont aussi en général plus précis.
L'identifiant SQL '23000' par exemple, correspond à une dizaine de codes d'erreur MySQL différents.
Quelques exemples de codes souvent rencontrés
Code MySQL SQLSTATE
Description
1048
23000
La colonne x ne peut pas être NULL
1169
23000
Violation de contrainte d'unicité
1216
23000
Violation de clé secondaire : insertion ou modification
impossible (table avec la clé secondaire)
1217
23000
Violation de clé secondaire : suppression ou modification
impossible (table avec la référence de la clé secondaire)
1172
42000
Plusieurs lignes de résultats alors qu'on ne peut en avoir
qu'une seule
1242
21000
La sous-requête retourne plusieurs lignes de résultats
alors qu'on ne peut en avoir qu'une seule
Pour une liste plus complète, il suffit d'aller sur la documentation officielle.
Pour finir, notez qu'il est tout à fait possible d'intercepter des avertissements avec un gestionnaire d'erreur, qui sont également
Partie 5 : Sécuriser et automatiser ses actions
297/414
www.openclassrooms.com
survenue...';
Et voici une des erreurs qui peut être interceptée par ce gestionnaire :
Code : Console
ERROR 1062 (23000): Duplicate entry '21' for key 'ind_uni_animal_id'
Le message d'erreur est constitué de trois éléments importants :
1062 : le numéro d'erreur MySQL (un nombre entier) ;
23000 : l'identifiant de l'état SQL (une chaîne de 5 caractères) ;
Duplicate entry '21' for key 'ind_uni_animal_id' : un message donnant le détail de l'erreur.
Identifiant de l'état SQL
Dans la procédure ajouter_adoption_continue(), c'est l'identifiant de l'état SQL ('23000') qui a été utilisé.
Il s'agit d'une chaîne de 5 caractères, renvoyée par le serveur au client pour informer de la réussite ou de l'échec d'une
instruction. Un identifiant commençant par '00' par exemple, signifie que l'instruction a réussi. '23000' est l'identifiant
renvoyé lorsqu'une erreur concernant une contrainte (NOT NULL, unicité, clé primaire ou secondaire,…) a été déclenchée.
Pour utiliser cet identifiant dans un gestionnaire d'erreur, il faut le faire précéder de SQLSTATE.
Numéro d'erreur MySQL
Pour utiliser le numéro d'erreur SQL, par contre, il suffit de l'indiquer, comme un nombre entier :
Code : SQL
DECLARE CONTINUE HANDLER FOR 1062 SELECT 'Une erreur est
survenue...';
Ce sont des codes qui, contrairement aux identifiants SQLSTATE, sont propres à MySQL. Ils sont aussi en général plus précis.
L'identifiant SQL '23000' par exemple, correspond à une dizaine de codes d'erreur MySQL différents.
Quelques exemples de codes souvent rencontrés
Code MySQL SQLSTATE
Description
1048
23000
La colonne x ne peut pas être NULL
1169
23000
Violation de contrainte d'unicité
1216
23000
Violation de clé secondaire : insertion ou modification
impossible (table avec la clé secondaire)
1217
23000
Violation de clé secondaire : suppression ou modification
impossible (table avec la référence de la clé secondaire)
1172
42000
Plusieurs lignes de résultats alors qu'on ne peut en avoir
qu'une seule
1242
21000
La sous-requête retourne plusieurs lignes de résultats
alors qu'on ne peut en avoir qu'une seule
Pour une liste plus complète, il suffit d'aller sur la documentation officielle.
Pour finir, notez qu'il est tout à fait possible d'intercepter des avertissements avec un gestionnaire d'erreur, qui sont également
Partie 5 : Sécuriser et automatiser ses actions
297/414
www.openclassrooms.com
