栏目分类
Hippocrat中文网 你的位置:JOY 中文站 > Hippocrat中文网 > mysql存储过程多层游标循环嵌套的写法分享
mysql存储过程多层游标循环嵌套的写法分享

发布日期:2025-01-03 17:56    点击次数:181


mysql存储过程多层游标循环嵌套的写法 最近有遇到一个需求 将有3级主从关联的表数据同步到另外一个有3级主从关联的表中,同步数据的表是第3级子表,而关联关系在第1、2级主表中,由于考虑到到内网数据库可能没法直接访问的限制,所以没有用代码来实现,而是直接用存储过程来实现 最终存储过程的写法如下 刚开始写完执行时, 报了一个“DECLARE CONTINUE HANDLER FOR NOT FOUND SET @IS_FOUND=0;”的错误 后面加了如下语句就正常了: 由于存储过程调试不太方便,其中a表是用来调试用的临时表,调试完成后可以删除 mysql存储过程循环中使用游标方法及遇到的问题 Oracle开发9年,频繁使用存储过程。现转到mysql,使用存储过程还是不太习惯,语法差别比较大,而且没有深入去了解过mysql的存储过程语法。 现在公司有部分数据需要通过存储过程处理,只能硬着头皮上了。 循环 与oracle 用法基本一样,使用loop或者while 首先定义一个游标 在游标定义后面要定义一个如果游标移动到最后一行数据后再次移动后处理的语句. 这个语句的含义是在fetch 不到内容时,将变量done 赋值为1.用来做跳出循环判断用. 此处与Oracle不同,Oracle会更简单,直接exit when v_cur%notfound;就可以跳出循环.v_cur是游标的名字. 接下来打开游标,遍历: 循环无法正常退出问题 由于while中使用了select XX into XX from XXX的这种赋值语句在 select 的时候,没查到数据,导致出发handler将done修改为1,然后光标就会跳出循环。 或者多层循环嵌套时内循环出现将done修改为1的情况。 以上这两种情况,都是因为CONTINUE HANDLER把done更新造成的,如果遇到此类问题,需要在每次可能出现done被改变的地方处理完逻辑后增加set done=0;把变量值改一下,这样就可以继续执行了。 总结 这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

Powered by JOY 中文站 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024