MySql存储过程游标循环的解决方式

2026-06-15编程代码276560

这段文章主要讨论了在MySQL存储过程中使用游标时遇到的问题的解决方法,特别是在跳出循环时遇到的困难,通过设置游标变量的默认值,成功解决了问题,并通过在代码中插入select语句进行调试

目录
  • 问题
  • 解决
  • 调试
  • 总结

问题

在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;

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持北冥有鱼【www.ufcn.cn】。

您可能感兴趣的文章:

  • MySQL 存储过程、游标、存储函数与触发器最佳实践
  • MySQL存储过程、游标与触发器示例详解
  • mysql存储过程游标之loop循环解读
  • mysql存储过程多层游标循环嵌套的写法分享
  • mysql数据库存储过程之游标(光标cursor)详解
  • MySql存储过程和游标的使用实例
  • Mysql 存储过程中使用游标循环读取临时表
本文地址:https://www.ufcn.cn/article/2420071.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!