私はmysqlカーソルを学んでいます。
以下はmysqlの手順です。実際には、テーブルAのすべての行をループし、テーブルBで関連するものをAの行ごとに「選択」したいと考えています。
ここでの問題は、内側の「選択」が空のセットを返すときにループが壊れることです。これは明らかに私が期待した動作ではありません。(現在の行が B に関連するものがない場合、 A のすべての行をループして、次の行に移動したい!)
カーソルの停止基準は次のようになることを学びましたDECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=1;
。また、それが問題の原因であることも知っています。
しかし、この状況に対する従来の回避策は何ですか?
create procedure SOME_PROC ()
BEGIN
DECLARE temp_id int;
DECLARE cursor_id CURSOR FOR select id from A;
DECLARE stop int default 0;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=1;
OPEN cursor_id;
FETCH cursor_id INTO temp_id;
while stop <> 1 do
select B.x from B where B.id = cursor_id;
FETCH cursor_id INTO temp_id;
end while;
CLOSE cursor_id;
END