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 構文にエラーがあります。Near 'of Interest; を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; cur_1 を開く;' 7行目

1064 - SQL 構文にエラーがあります。'OF cur_1; の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。エンドループ; cur_1 を閉じます。l_out=l_sno を設定します。16行目で終了

4

1 に答える 1

3

あなたはDB2のような別の種類のSQLから来ているように見えます-それらはうまくいきます。

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 に答える