我正在学习mysql游标。
以下是一个mysql过程,我实际上想循环遍历表A中的所有行,并为每个A行'选择'表B中的相关内容。
现在的问题是,当内部'select'返回一个空集时循环中断,这显然不是我预期的行为。 (我希望它循环遍历A的所有行!当前行在B中没有任何相关内容,然后转到下一行!)
我已经知道游标的停止标准应该是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
答案 0 :(得分:1)
解决方法:使用put SELECT ... INTO可以不将任何行返回到单独的BEGIN ... END块中,并将其自己的CONTINUE处理程序用于NOT FOUND作为解决方法。