帮我看看这个存储过程问题在哪里

woshigefantong 2010-12-09 05:41:11
这个是个很简单的存储过程,事实上我只是尝试使用一下游标。
可是事实上这个游标似乎并没有起作用

BEGIN
declare myid int;
declare done int;
--定义游标
DECLARE rs_cursor CURSOR FOR select itemid from relation where userid=1;
--游标走到最后的标志
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
--打开游标
open rs_cursor;
--开始循环
cursor_loop:loop
FETCH rs_cursor into myid;
--如果游标走到了最后,就跳出循环
if done=1 then
leave cursor_loop;
end if;
--打印出游标循环出来的每个itemid
select myid;
end loop cursor_loop;
close rs_cursor;
END
这里我遇到的问题是
我对应于userid=1的这个查询
select itemid from relation where userid=1;在数据库里面可以查出很多条itemid
可是实际上我这个存储过程的select myid;只执行了一次,也就是只查询出一个itemid。
似乎这个游标只执行一次就退出循环了。
我的这个存储过程问题出在哪里呢?请高人指点一下
谢谢啦。
...全文
47 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2010-12-09
  • 打赏
  • 举报
回复
建议楼主多看看MYSQL的官方手册中的语法和例子。
ACMAIN_CHM 2010-12-09
  • 打赏
  • 举报
回复
BEGIN
declare myid int;
declare done int DEFAULT 0;
--定义游标
DECLARE rs_cursor CURSOR FOR select itemid from relation where userid=1;
--游标走到最后的标志
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
--打开游标
woshigefantong 2010-12-09
  • 打赏
  • 举报
回复
楼上的做法不行
我试了
这次没有任何输出
似乎那个while循环根本就没有执行过
wwwwb 2010-12-09
  • 打赏
  • 举报
回复
declare myid int;
declare done int;
--定义游标
DECLARE rs_cursor CURSOR FOR select itemid from relation where userid=1;
--游标走到最后的标志
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
--打开游标
open rs_cursor;
--开始循环
FETCH rs_cursor into myid;
WHILE done=0 DO
--打印出游标循环出来的每个itemid
select myid;
FETCH rs_cursor into myid;
END WHILE;
close rs_cursor;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧