Maison >base de données >tutoriel mysql >Comment supprimer « Erreur 1329 : aucune donnée » dans les procédures stockées qui ne renvoient pas de données ?
De nombreux développeurs rencontrent le frustrant « Erreur 1329 : aucune donnée – aucune ligne récupérée, sélectionnée ou traitée » lorsque exécuter des procédures stockées. Cependant, cette erreur se produit souvent même lorsque la procédure fonctionne correctement, ce qui soulève la question de savoir comment supprimer ce message inutile.
Une solution potentielle réside dans la procédure stockée elle-même. Par défaut, les procédures stockées sont censées renvoyer un jeu de résultats. Cependant, si la procédure effectue des opérations qui ne génèrent aucune donnée (telles que la manipulation de données ou la mise à jour d'enregistrements), elle déclenchera le message d'erreur.
Pour résoudre ce problème, nous pouvons modifier la procédure stockée pour indiquer explicitement que il ne renvoie aucune donnée. Ceci peut être réalisé en ajoutant la ligne suivante au début de la procédure :
<code class="sql">READS SQL DATA</code>
Cette ligne informe la base de données que la procédure lira uniquement à partir des tables et ne renverra aucune ligne.
Une autre approche consiste à gérer l'exception NOT FOUND dans la procédure. Lorsqu'un curseur est utilisé pour extraire des lignes d'une table, il peut rencontrer un scénario dans lequel il n'y a plus de lignes à extraire. Cela entraînera le curseur à lever une exception NOT FOUND. En capturant cette exception et en définissant un indicateur, nous pouvons éviter le message d'erreur.
<code class="sql">DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;</code>
En ajoutant cette ligne, nous demandons à la base de données de définir l'indicateur terminé sur 1 lorsque le curseur rencontre l'exception NOT FOUND. Cet indicateur peut ensuite être utilisé pour quitter la boucle du curseur et terminer la procédure sans déclencher le message d'erreur.
Enfin, une autre solution de contournement consiste à exécuter une requête factice supplémentaire qui lit à partir d'une table et réussit. Cela effacera l'avertissement sur MySQL 5.5.13.
<code class="sql">SELECT name INTO l_name FROM customer_tbl LIMIT 1;</code>
En suivant ces approches, les développeurs peuvent supprimer le message "Erreur 1329" pour les procédures stockées qui ne renvoient aucune donnée, garantissant ainsi une exécution plus fluide sans inutile invite d'erreur.
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!