Partie II
Programmation procédurale
252
© Éditions Eyrolles
Gestion d’une erreur particulière
Le tableau suivant décrit une amélioration de la précédente procédure par le fait de gérer
l’erreur particulière permettant de savoir si la requête renvoie plusieurs lignes (ERROR 1172
(42000): Result consisted of more than one row). La procédure se termine
maintenant correctement si la requête retourne une seule ligne ou plusieurs (message personnalisé en sortie de bloc).
La trace d’une exécution correcte de cette procédure (qui se déroute hors du bloc du fait de
plusieurs lignes retournées) est la suivante :
Tableau 7-9 Exceptions 1172 et NOT FOUND traitées avec EXIT
Code MySQL
Commentaires
CREATE PROCEDURE bdsoutou.procException1
(IN p_comp VARCHAR(4))
BEGIN
DECLARE flagPlusDun BOOLEAN DEFAULT 0;
DECLARE flagNOTFOUND BOOLEAN DEFAULT 0;
DECLARE var1 VARCHAR(20);
IF flagNOTFOUND THEN
SELECT CONCAT('Il n''y a pas de pilote pour la
compagnie ',p_comp)
AS 'Resultat procException1';
END IF;
IF flagPlusDun THEN
SELECT CONCAT('Il y a plusieurs pilotes pour la
compagnie ',p_comp)
AS 'Resultat procException1';
END IF;
END;
Déclaration de la procédure et
des variables.
Bloc qui déclare les deux
exceptions.
Requête pouvant déclencher
l’exception prévue.
Affichage du résultat.
Fin du bloc.
Gestion des erreurs.
Fin de la procédure.
Web
BEGIN
;
DECLARE EXIT HANDLER FOR NOT FOUND
SET flagNOTFOUND :=1;
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';
END;
DECLARE EXIT HANDLER FOR 1172
SET flagPlusDun :=1
Précédent

- 274/418

Suivant