Maison  >  Article  >  base de données  >  Comment gérer « Erreur 1329 : Aucune donnée - Zéro ligne récupérée » dans les procédures stockées MySQL ?

Comment gérer « Erreur 1329 : Aucune donnée - Zéro ligne récupérée » dans les procédures stockées MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 14:29:30903parcourir

How to Handle

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 - zéro 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 :

<code class="sql">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</code>

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 :

<code class="sql">DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;</code>

Cette instruction indique à MySQL de définir 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 :

<code class="sql">SELECT name INTO l_name FROM customer_tbl LIMIT 1;</code>

Cette instruction garantira qu'une ligne est récupérée, effaçant ainsi l'avertissement.

En gérant correctement la condition « NON TROUVÉ » 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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn