ホームページ >データベース >mysql チュートリアル >データを返さないストアド プロシージャの「エラー 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 サイトの他の関連記事を参照してください。