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

标签: sql MySQL
发布时间: 2017/1/9 21:34:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我把这当作示例函数。这意味着要做一些更多处理游标,但我现在它总数 (我不想使用计数,因为我打算后期的扩展) 的结果。

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

注意,我没有从查询返回的数据,我知道有关使用如果未找到处理程序。我省略了这些为简洁起见。

我错了去哪里了? 欢呼

解决方法 1:

您需要添加一个处理程序︰

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 ;

通过声明处理程序和使用它在循环中,你赶上未发现错误,当它到达结果集的末尾处。或如果查询未不返回任何结果。

赞助商