我正在学习mysql游标。
下面是一个mysql程序,我实际上想遍历表A中的所有行,并在表B中为每个A的行‘选择’相关的东西。
现在的问题是,当内部的'select‘返回一个空集时,while循环中断,这显然不是我所期望的行为。(我希望它循环遍历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发布于 2015-12-30 22:42:24
解决方法:使用put SELECT ...可能不会在单独的BEGIN中返回任何行...具有自己的CONTINUE处理程序的END块作为解决办法。
https://stackoverflow.com/questions/15617092
复制相似问题