MySQL中的游标

时间:2015-01-26 18:40:40

标签: mysql cursor

感谢您寻求帮助!

我写过这个非常简单的游标,但由于某种原因它不想工作:

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。

谢谢,克里斯

1 个答案:

答案 0 :(得分:0)

这似乎是固定的!我忘了终止if 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;