MySql存储过程游标循环问题解决过程

问题

在mysql的存储过程中使用了游标去循环,之前使用是没问题,后续加入了一些逻辑,直接跳出循环了,不走循环里面的逻辑、

解决过程

在mysql中主要用以下的方式来声明游标与使用游标:

# 声明标志位,来退出循环

declare done int default 0;

# 声明当游标中找不到数据时,设置done为1.

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;        

游标的使用:

open cur;
						
						posLoop:LOOP
						
								fetch cur into v_bjfh,v_yz,v_yjjb,v_dw;						
						
								if done = 1 then leave posLoop;						
								
								end if;		
	-- 关闭循环
						end loop posLoop;			
					
			-- 关闭游标
			close cur;				
									

现在问题关键点在于,走到 if done = 1 时,直接跳出了。那说明之前设置的done的默认值没有生效。

所以,在进入循环之前,就给done再次设置一个默认值0。

set done = 0;
open cur;
						
						posLoop:LOOP
						
								fetch cur into v_bjfh,v_yz,v_yjjb,v_dw;						
						
								if done = 1 then leave posLoop;						
								
								end if;		
	-- 关闭循环
						end loop posLoop;			
					
			-- 关闭游标
			close cur;				
									

由此,解决了问题,但是不知道为什么这个done之前是在哪里给设置成了1.

调试

mysql不像oracle那样,可以进行断点调试,其实调试起来是比较麻烦。一般采用在里面写select输出进行调试,如下:

select done;

输出一个定义的变量来进行调试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值