ホームページ >データベース >mysql チュートリアル >データを返さないストアド プロシージャの「エラー 1329: データがありません」を抑制するにはどうすればよいですか?

データを返さないストアド プロシージャの「エラー 1329: データがありません」を抑制するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 15:46:30544ブラウズ

How to Suppress

「エラー 1329: データなし」のジレンマを克服する

多くの開発者は、次のような場合にイライラする「エラー 1329: データなし - フェッチ、選択、または処理された行がゼロ」に遭遇します。ストアド プロシージャを実行します。ただし、このエラーはプロシージャが正しく機能している場合でも発生することが多く、この不要なメッセージを抑制する方法が問題になります。

考えられる解決策の 1 つはストアド プロシージャ自体の中にあります。デフォルトでは、ストアド プロシージャは結果セットを返すことが期待されます。ただし、プロシージャがデータを生成しない操作 (データ操作やレコードの更新など) を実行すると、エラー メッセージが表示されます。

これを解決するには、ストアド プロシージャを変更して、次のことを明示的に示すことができます。データは返されません。これは、プロシージャの先頭に次の行を追加することで実現できます:

<code class="sql">READS SQL DATA</code>

この行は、プロシージャがテーブルからのみ読み取り、行を返さないことをデータベースに通知します。

別のアプローチには、プロシージャ内で NOT FOUND 例外を処理することが含まれます。カーソルを使用してテーブルから行をフェッチすると、フェッチする行がもうないという状況が発生することがあります。これにより、カーソルによって NOT FOUND 例外が発生します。この例外をトラップし、フラグを設定することで、エラー メッセージを回避できます。

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

この行を追加することで、カーソルが NOT FOUND 例外に遭遇したときに、done フラグを 1 に設定するようにデータベースに指示します。このフラグを使用すると、カーソル ループを終了し、エラー メッセージを表示せずに手順を完了できます。

最後に、別の回避策として、テーブルから読み取り、成功する追加のダミー クエリを実行します。これにより、MySQL 5.5.13 の警告がクリアされます。

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

これらのアプローチに従うことで、開発者はデータを返さないストアド プロシージャの「エラー 1329」メッセージを抑制し、不必要な処理を行わずにスムーズな実行を保証できます。エラープロンプト。

以上がデータを返さないストアド プロシージャの「エラー 1329: データがありません」を抑制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。