2009年5月22日金曜日

mysql fetch

select * from hoge;

id                 seq
------------+----------
10                2
11                3
14                9
--
というテーブルがある。

プロシージャ内で

declare cur cursor for select id,seq from hoge where id = _id and seq > 0 order by id asc;

declare continue handler for not found set _norows = true;

と宣言しておいて

新規にデータをinsertする。
insert hoge values( 0, 1 );

_id変数に上で入れたidを代入する
set _id = 0;

open cur;

fetch cur into id, seq;
cur:loop
 select * from hoge;

 if _norows
 then
  leave cur;
 end if;

 fetch next from cur into id, seq;
end loop cur;

とやると
新規に入れたrowを含めたすべてのデータが出ると思われる。
が、leave cur;で一回りもせずに終わってしまう。
これってdeclare宣言時にrowが存在しないためって言うことなのかなあ?

↑のこれは未検証です。

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

<< ホーム