这个游标实在是搞不明白了

小D2013 2018-11-14 10:37:18
以下存储过程中使用游标 , 单独运行 那个查询语句可以查到数据,为什么运行这个存储过程就不可以了
BEGIN
#Routine body goes here...
DECLARE projectid varchar(50);
DECLARE babyid varchar(50);
DECLARE diagnose varchar(50);
DECLARE ctime date;
DECLARE lastchktime date;

DECLARE done int default true;
DECLARE mycursor CURSOR for

select t.id proid,t.babyid,t.diagnose,t.ctime, MAX(chktime) lastchktime from
(
select a.id,a.babyid,a.diagnose,a.ctime,b.ctime chktime
from highriskbabyproject a
inner join today_clinic b on a.babyid=b.babyId and
(a.closetype is null or a.closetype='') and
a.diagnose in('重度消瘦')
) t
GROUP BY t.id,t.babyid,t.diagnose,t.ctime
HAVING lastchktime < DATE_ADD(CURDATE() ,INTERVAL -7 MONTH) and ctime < DATE_ADD(CURDATE() ,INTERVAL -7 MONTH);


DECLARE continue handler for not found set done = false;

OPEN mycursor;

REPEAT

FETCH next from mycursor into projectid,babyid,diagnose,ctime,lastchktime;
SELECT projectid,diagnose,babyid,ctime,lastchktime; (运行这个存储过程,这里为什么差不到数据)

IF done THEN
UPDATE highriskbabyproject set closetype='失访', closetime= DATE_ADD(ctime,INTERVAL 7 MONTH) where id=projectid;
END IF;

UNTIL done =false

END REPEAT;

CLOSE mycursor;
END
...全文
86 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-11-15
  • 打赏
  • 举报
回复
引用 4 楼 donglizhong 的回复:
如果把having子句去掉就可以,但是我希望查询的结果集中,能筛选出来

单独执行带having语句能出来?然后放到存储过程中带having出不来,去掉having能出来?

如果是这样,那就在外边再加一层select * from (原来的查询语句)t where lastchktime < DATE_ADD(CURDATE() ,INTERVAL -7 MONTH) and ctime < DATE_ADD(CURDATE() ,INTERVAL -7 MONTH)

小D2013 2018-11-15
  • 打赏
  • 举报
回复
如果把having子句去掉就可以,但是我希望查询的结果集中,能筛选出来
小D2013 2018-11-15
  • 打赏
  • 举报
回复
还是取不到啊,游标中的那个查询是可以查到数据的,怎么到游标里就不行了呢
二月十六 2018-11-14
  • 打赏
  • 举报
回复
mysql游标取值是这么取吗?不太熟悉mysql,试试这样取值呢
FETCH mycursor into projectid,babyid,diagnose,ctime,lastchktime;
小D2013 2018-11-14
  • 打赏
  • 举报
回复
对了,这个是 mysql数据库的

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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