Partie II
Programmation procédurale
256
© Éditions Eyrolles
En d’autres termes, il faudra soit :
q
interrompre brusquement votre procédure avec différents cas d’erreurs, pour lister les
codes erreur générés en sortie ;
q
vous contenter de gérer globalement les autres exceptions, tout en ne sachant pas de quelles erreurs il s’agit.
Le tableau suivant décrit la précédente procédure qui contrôle en plus toutes les autres erreurs
non prévues, en appelant le sous-programme autreErreur().
Tableau 7-13 Exceptions toutes traitées avec EXIT et SQLEXCEPTION
Code MySQL
Commentaires
CREATE PROCEDURE bdsoutou.tropdeLignes
(IN p_comp VARCHAR(4))
BEGIN
SELECT CONCAT('Il y a plusieurs pilotes pour
la compagnie ',p_comp)
AS 'Resultat tropdeLignes';
END;
Codage des sous-programmes
appelés lors des exceptions.
CREATE PROCEDURE bdsoutou.pasTrouve
(IN p_comp VARCHAR(4))
BEGIN
SELECT CONCAT('Il n''y a pas de pilote pour
la compagnie ',p_comp)
AS 'Resultat pasTrouve';
END;
CREATE PROCEDURE bdsoutou.autreErreur()
BEGIN
SELECT 'Erreur mais laquelle?'
AS 'Resultat autreErreur';
3 cas
END;
CREATE PROCEDURE bdsoutou.procException1
(IN p_comp VARCHAR(4))
BEGIN
DECLARE var1 VARCHAR(20);
DECLARE EXIT HANDLER FOR 1172
CALL bdsoutou.tropdeLignes(p_comp);
DECLARE EXIT HANDLER FOR NOT FOUND
CALL bdsoutou.pasTrouve(p_comp);
SELECT nom INTO var1 FROM bdsoutou.Pilote
WHERE comp = p_comp;
SELECT CONCAT('Le seul pilote de la compagnie',
p_comp,' est ',var1)
AS 'Resultat procException1';
Procédure principale qui déclare
les deux exceptions et toutes les
autres.
Requête pouvant déclencher
l’exception prévue.
Affichage du résultat.
END;
Fin de la procédure.
Web
DECLARE EXIT HANDLER FOR SQLEXCEPTION
CALL bdsoutou.autreErreur();
Programmation procédurale
256
© Éditions Eyrolles
En d’autres termes, il faudra soit :
q
interrompre brusquement votre procédure avec différents cas d’erreurs, pour lister les
codes erreur générés en sortie ;
q
vous contenter de gérer globalement les autres exceptions, tout en ne sachant pas de quelles erreurs il s’agit.
Le tableau suivant décrit la précédente procédure qui contrôle en plus toutes les autres erreurs
non prévues, en appelant le sous-programme autreErreur().
Tableau 7-13 Exceptions toutes traitées avec EXIT et SQLEXCEPTION
Code MySQL
Commentaires
CREATE PROCEDURE bdsoutou.tropdeLignes
(IN p_comp VARCHAR(4))
BEGIN
SELECT CONCAT('Il y a plusieurs pilotes pour
la compagnie ',p_comp)
AS 'Resultat tropdeLignes';
END;
Codage des sous-programmes
appelés lors des exceptions.
CREATE PROCEDURE bdsoutou.pasTrouve
(IN p_comp VARCHAR(4))
BEGIN
SELECT CONCAT('Il n''y a pas de pilote pour
la compagnie ',p_comp)
AS 'Resultat pasTrouve';
END;
CREATE PROCEDURE bdsoutou.autreErreur()
BEGIN
SELECT 'Erreur mais laquelle?'
AS 'Resultat autreErreur';
3 cas
END;
CREATE PROCEDURE bdsoutou.procException1
(IN p_comp VARCHAR(4))
BEGIN
DECLARE var1 VARCHAR(20);
DECLARE EXIT HANDLER FOR 1172
CALL bdsoutou.tropdeLignes(p_comp);
DECLARE EXIT HANDLER FOR NOT FOUND
CALL bdsoutou.pasTrouve(p_comp);
SELECT nom INTO var1 FROM bdsoutou.Pilote
WHERE comp = p_comp;
SELECT CONCAT('Le seul pilote de la compagnie',
p_comp,' est ',var1)
AS 'Resultat procException1';
Procédure principale qui déclare
les deux exceptions et toutes les
autres.
Requête pouvant déclencher
l’exception prévue.
Affichage du résultat.
END;
Fin de la procédure.
Web
DECLARE EXIT HANDLER FOR SQLEXCEPTION
CALL bdsoutou.autreErreur();
