我将此作为示例函数。这意味着要对光标进行更多处理,但是现在我得到它总计结果数(我不想使用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处理程序。为简洁起见,我省略了这些。
我哪里出错了? 干杯
答案 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错误。或者,如果查询没有返回结果。