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;
输出一个定义的变量来进行调试。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
图文详解Mysql使用left join写查询语句执行很慢问题的解决
最近工作中遇到一个非常奇怪的问题,mysql中有两张表,test_info和test_do_info需要进行LEFT JOIN关联查询,下面这篇文章主要给大家介绍了关于Mysql使用left join写查询语句执行很慢问题的解决方法2023-04-04
mysql 8.0 错误The server requested authentication method unkno
在本篇文章里小编给大家整理的是关于mysql 8.0 错误The server requested authentication method unknown to the client解决方法,有此需要的朋友们可以学习下。2019-08-08
Mysql中报错函数floor()函数和rand()函数的配合使用及原理详解
在项目中的SQL语句中遇到几个数值处理函数,看着有些懵,就小小的总结一下,这篇文章主要给大家介绍了关于Mysql中报错函数floor()函数和rand()函数的配合使用及原理的相关资料,需要的朋友可以参考下2022-07-07


最新评论