关于mysql游标取值为空的问题

wondyfox 2009-11-04 11:18:35
我的存储过程如下:
delimiter $$
use heidunlog$$
drop procedure if exists sp_test$$
create procedure sp_test()
begin
declare stop integer default 1;
declare name varchar(50);
declare sqlstr text;
declare cur_1 cursor for select name from user;
DECLARE CONTINUE HANDLER FOR not FOUND set stop=0;
open cur_1;
fetch cur_1 into name ;
while stop<>0 do
select name ;
fetch next from cur_1 into name ;
end while;
set name ='';
end$$
delimiter ;
存在的问题是取出来的tablename老是为空,可以明确的是游标有取到记录,因为stop不为0,循环次数与我的记录数一致
更奇怪的是,我如果把游标定义改成declare cur_1 cursor for select min(id) from user就可以取得到值。请问大家,为什么会有这种现象,我现在要取的是记录集中的name
...全文
501 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
木讷小猫 2011-12-15
  • 打赏
  • 举报
回复
我从昨天到今天也遇到同样的问题。经测试。在不同的表中有两个同名字段时需要加别名。即使没有同时涉及到这两张表也要用别名来取值。根源是什么导致的还不清楚。解决办法正如楼上所说----表用别名。谢谢了。这个问题困扰了我快两天了。虽然不清楚原因,但以知道解决办法。以后慢慢琢磨其原因。
wondyfox 2009-11-04
  • 打赏
  • 举报
回复
declare cur_1 cursor for select a.name from user a;
阿_布 2009-11-04
  • 打赏
  • 举报
回复
while stop <>0 do
select name ;
fetch cur_1 into name ;
end while;
wondyfox 2009-11-04
  • 打赏
  • 举报
回复
好了,问题解决了,谢谢一楼兄弟的提醒,虽然不是这种方式,但给了灵感,一样给分,
具体修改方法是光标定义时把查询语句的表名起别名,然后再用如下
declare a.cur_1 cursor for select name from user a;
个人估计是版本不同导致网络上很多关于游标的使用方式不可以,
小弟用的是msyql5.1.38
wondyfox 2009-11-04
  • 打赏
  • 举报
回复
一楼的兄弟,什么意思,能不能说得再明白点
wwwwb 2009-11-04
  • 打赏
  • 举报
回复
你将NAME更名 OR 加``试试

56,678

社区成员

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

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