感谢您的帮助!

我编写了这个非常简单的游标,但是由于某种原因,它不起作用:

drop table if exists t1;
drop procedure if exists simple_loop;
create temporary table values ('chris'),('peter'),('brian'),('stewie'),('meg');
create procedure simple_loop()
begin
declare finished int default false;
declare n varchar(45);
declare c cursor for select name from t1;
declare continue handler for not found set finished = true;
open c;
c_loop: loop
    fetch c into n;
    --if finished then leave c_loop;
    select n;
end loop;
end


如您所见,我注释掉了一行,说结果完成后离开循环。这是因为不会执行整个过程脚本。

如果该行存在,它将不会抱怨该行导致问题,而是结束:


  ...在'loop; end'附近使用的正确句法错误代码:1064


我不知道为什么。 MySQL文档似乎并没有太大帮助。如果我还添加行“ close c;”它也不起作用,但是指出整个结尾都是错误。

任何指针,不胜感激。

在Ubuntu上,MySQL版本为5.5。

谢谢克里斯

最佳答案

这似乎是固定的!我忘了终止if语句:

drop table if exists t1;
drop procedure if exists simple_loop;
create temporary table values ('chris'),('peter'),('brian'),('stewie'),('meg');
create procedure simple_loop()begin
declare finished int default false;
declare n varchar(45);
declare c cursor for select name from t1;
declare continue handler for not found set finished = true;
open c;
c_loop: loop
    fetch c into n;
    if finished then leave c_loop; end if;
    select n;
end loop;
end


看一下以前注释掉的行:

if finished then leave c_loop; END IF;

07-28 12:32