Maison > base de données > tutoriel mysql > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-26 14:29:30
original
902 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!