如何设置一个mysql游标的停止条件,它正确迭代表中的所有行?

时间:2013-03-25 14:12:19

标签: mysql stored-procedures cursor

我正在学习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

1 个答案:

答案 0 :(得分:1)

解决方法:使用put SELECT ... INTO可以不将任何行返回到单独的BEGIN ... END块中,并将其自己的CONTINUE处理程序用于NOT FOUND作为解决方法。