当前的MYSQL游标

时间:2012-05-11 16:29:00

标签: mysql cursor

*DELIMITER //
create procedure test(OUT l_out INT)
begin
DECLARE done INT DEFAULT FALSE;
declare l_sno INT default 0;
declare a INT default 0;
declare b INT default 0;
declare cur_1 cursor for select sno,interest from temp t  where x_coord between 55 and 60 for update of interest;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open cur_1; 
read_loop: LOOP
fetch cur_1 into a,b;
if done then
    Leave read_loop;
end if;
set l_sno=l_sno+1;
update temp set interest =1 where CURRENT OF cur_1;
END LOOP;
close cur_1;
set l_out=l_sno;
end //
;*

错误:

  

1064 - 您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在感兴趣的地方附近使用正确的语法; DECLARE CONTINUE HANDLER for NOT FOUND SET done = TRUE;打开cur_1;'在第7行

     

1064 - 您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'OF cur_1附近使用正确的语法;结束循环;关闭cur_1; set l_out = l_sno;在第16行结束

1 个答案:

答案 0 :(得分:3)

在我看来,就像你来自不同类型的SQL,比如DB2 - 那些工作。

来自http://dev.mysql.com/doc/refman/5.0/en/cursor-restrictions.html

  

游标是只读的;你不能使用游标来更新行。

     

UPDATE WHORE CURRENT OF和DELETE WHERE CURRENT OF未实现,因为不支持可更新游标。

所以我猜你不能这样做,你必须指定一个类似mysql的where子句。