0

我正在学习mysql游标。

以下是一个 mysql 程序,我实际上想遍历表 A 中的所有行,并为每个 A 的行在表 B 中“选择”相关的内容。

现在的问题是,当内部“选择”返回一个空集时,这个 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
4

1 回答 1

1

Work Around: Use put SELECT ... INTO that may return no rows into a separate BEGIN ... END block with its own CONTINUE handler for NOT FOUND as a workaround.

于 2015-12-30T14:42:23.917 回答