1
*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 服务器版本相对应的手册,以获取在 'ofinterest 附近使用的正确语法;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 打开 cur_1;' 在第 7 行

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

4

1 回答 1

3

在我看来,您来自不同类型的 SQL,例如 DB2 —— 那些工作。

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

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

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

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

于 2012-05-11T16:37:40.123 回答