「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > データを返さないストアド プロシージャの「エラー 1329: データがありません」を抑制するにはどうすればよいですか?

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

2024 年 11 月 2 日に公開
ブラウズ:645

How to Suppress \

「エラー 1329: データがありません」のジレンマを克服する

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

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

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

READS SQL DATA

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

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

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

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

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

SELECT name INTO l_name FROM customer_tbl LIMIT 1;

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3