首页 > 数据库    日期:2026-06-18 / 浏览

问题

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持教程之家。

觉得上面的内容有用吗?快来点个赞吧!

点赞() 我要打赏

温馨提示 : 本站内容来自会员投稿以及互联网,所有源码及教程均为作者总结编辑,请大家在使用过程中提前做好备份,以免发生无法预知的错误,源码类教程请勿直接用于生产环境!

 可能感兴趣的文章