値を返す必要のないストアド プロシージャがあります。問題なくスムーズに実行されます。ただし、実行終了後にエラー メッセージが出力されます。
エラー: データがありません - 取得、選択、または処理された行は 0 行です
このエラーメッセージを消すにはどうしたらいいでしょうか?
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
ベストアンサー1
おそらく、投稿に次の行を含めるのを忘れただけだと思います。
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
コードは正しいですが、mysql のバグや異常な動作により、処理されていても警告が表示されます。テーブルを伴い成功するプロシージャの最後に「ダミー」ステートメントを追加すれば、これを回避できます。これにより警告がクリアされます。(参照:警告の表示) あなたの場合:
SELECT name INTO l_name FROM customer_tbl LIMIT 1;
ループ終了後。MySQL 5.5.13 では、Linux および Windows で警告が表示されなくなります。MySQL Bug 60840 にコメントしましたが、将来的には修正されることを期待しています...