Avertissement d'absence de données dans les procédures stockées : "Erreur 1329 : zéro ligne récupérée, sélectionnée ou traitée"
Dans la programmation de base de données, les procédures stockées sont souvent utilisés pour encapsuler des opérations complexes et garantir l’intégrité des données. Cependant, ces procédures peuvent parfois rencontrer des erreurs ou produire des avertissements inattendus. Un problème courant est le message « Erreur 1329 : Aucune donnée - aucune ligne récupérée, sélectionnée ou traitée ».
Cet avertissement apparaît généralement lorsqu'une procédure stockée ne gère pas explicitement le cas où aucune donnée n'est renvoyée. Pour résoudre ce problème, il faut gérer correctement la condition « NON TROUVÉ ». Dans MySQL, cela peut être réalisé à l'aide d'une instruction CONTINUE HANDLER.
Considérez la procédure stockée testing_proc suivante :
CREATE PROCEDURE `testing_proc`()
READS SQL DATA
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE l_name VARCHAR(20);
DECLARE my_cur CURSOR FOR
SELECT name FROM customer_tbl;
OPEN my_cur;
my_cur_loop:
LOOP FETCH my_cur INTO l_name;
IF done = 1 THEN
LEAVE my_cur_loop;
END IF;
INSERT INTO names_tbl VALUES(l_name);
END LOOP my_cur_loop;
CLOSE my_cur;
END
Si cette procédure s'exécute sans aucune donnée dans la table customer_tbl, elle déclenchera l'avertissement "Erreur 1329". Pour éviter cela, nous pouvons ajouter l'instruction CONTINUE HANDLER suivante à la fin de la procédure :
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
Cette instruction indique à MySQL de définissez la variable done sur 1 si aucune ligne n'est trouvée. Cela entraînera la sortie de la boucle du curseur, empêchant l'erreur de se produire.
Alternativement, on peut également contourner l'avertissement en ajoutant une instruction "factice" à la fin de la procédure qui implique une table et qui réussit, tels que :
SELECT name INTO l_name FROM customer_tbl LIMIT 1;
Cette instruction garantira qu'une ligne est récupérée, effaçant ainsi l'avertissement.
En gérant correctement la condition "NOT FOUND" ou en ajoutant une instruction factice, on peut éliminer l'avertissement "Erreur 1329" dans les procédures stockées qui ne renvoient aucune donnée.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3