Virginie Broussaille
Code : Console
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
Tentons ensuite l'expérience avec une ville qui ne donnera aucun résultat.
Code : SQL
CALL test_condition('Bruxelles');
Code : Console
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
On a la même erreur dans les deux cas, lorsqu'on essaye de faire un FETCH alors qu'il n'y a pas ou plus de ligne à récupérer. Or,
vous vous souvenez peut-être d'une condition prédéfinie pour les gestionnaires d'erreur, NOT FOUND, qui représente les
erreurs dont l'identifiant SQL commence par '02', ce qui est le cas ici.
On va donc utiliser cette condition pour arrêter la boucle : on définit un gestionnaire pour la condition NOT FOUND, qui change
la valeur d'une variable locale. Cette variable locale vaut 0 au départ, et passe à 1 quand le gestionnaire est déclenché (donc
quand il n'y a plus de ligne). Il suffit alors d'ajouter une structure IF qui vérifie la valeur de la variable locale une fois le FETCH
exécuté. Si elle vaut 1, on quitte la boucle.
Exemple : la procédure test_condition2() ci-dessous fait la même chose que test_condition(), mais inclut le gestionnaire d'erreur
et le IF nécessaires pour stopper la boucle dès que toutes les lignes sélectionnées ont été parcourues :
Code : SQL
DELIMITER |
CREATE PROCEDURE test_condition2(IN p_ville VARCHAR(100))
BEGIN
DECLARE v_nom, v_prenom VARCHAR(100);
DECLARE fin TINYINT DEFAULT 0;
-- Variable
locale utilisée pour stopper la boucle
DECLARE curs_clients CURSOR
FOR SELECT nom, prenom
FROM Client
WHERE ville = p_ville;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin = 1; -Gestionnaire d'erreur pour la condition NOT FOUND
OPEN curs_clients;
loop_curseur: LOOP
FETCH curs_clients INTO v_nom, v_prenom;
IF fin = 1 THEN
-- Structure
IF pour quitter la boucle à la fin des résultats
LEAVE loop_curseur;
END IF;
SELECT CONCAT(v_prenom, ' ', v_nom) AS 'Client';
END LOOP;
Partie 5 : Sécuriser et automatiser ses actions
304/414
www.openclassrooms.com
Précédent

- 304/413

Suivant