迭代游标后从MySQL函数返回一个值

时间:2014-06-26 15:55:44

标签: mysql sql iterator

我将此作为示例函数。这意味着要对光标进行更多处理,但是现在我得到它总计结果数(我不想使用count,因为我打算稍后扩展它)。

delimiter $$
create function testfunction()
returns int reads sql data
begin
declare l_myfield int;
declare iter int;
declare mycur cursor for select myfield from mytable;
set iter = 0;
open mycur;
loop
fetch mycur into l_myfield;
set iter = iter + 1;
end loop;
close mycur;
return iter;
end;
$$
delimiter ;

然而,我最终得到了经典:

ERROR 1329 (02000): No data - zero rows fetched, selected, or processed

请注意,我有从查询返回的数据,我知道如何使用if-not-found处理程序。为简洁起见,我省略了这些。

我哪里出错了? 干杯

1 个答案:

答案 0 :(得分:4)

您需要添加处理程序:

delimiter $$
CREATE function testfunction()
    returns int reads sql data
    BEGIN
        DECLARE done INT DEFAULT FALSE;
        declare i_myfield int;
        declare iter int;
        declare mycur cursor for select myfield from mytable;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
        set iter = 0;
        open mycur;

        read_loop: loop
            fetch mycur into i_myfield;
            IF done THEN
                LEAVE read_loop;
            END IF;
            SET iter = iter + 1;
        END loop;
    close mycur;
    return iter;
END;
$$
delimiter ;

通过声明处理程序并在循环中使用它,当它到达结果集的末尾时捕获NOT FOUND错误。或者,如果查询没有返回结果。