Mysql中解决多个游标循环,执行完第一个后,其他的不进行循环的问题

1.定义原始变量

DECLARE done1, done2 BOOLEAN DEFAULT FALSE;

2.声明游标数据源

DECLARE cursorName1 CURSOR FOR [查询sql]

3.声明游标数据源

DECLARE cursorName2 CURSOR FOR [查询sql]

4.声明未发现数据异常时变量的赋值定义

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = TRUE,done2 = TRUE;

5.执行游标循环
    #执行一个游标循环 

OPEN cursorName1;#打开游标
FETCH NEXT FROM    cursorName1 INTO [定义变量1...]; #取游标中的下一条数据放在定义的变量中进行数据处理
REPEAT IF NOT done1 THEN [执行sql语句] END IF; #重复的行动--->如果非done1为真,那么执行对应的sql语句
FETCH NEXT FROM    cursorName1 INTO [定义变量1...]; #继续取游标中的数据放在定义的变量中
UNTIL done1 END REPEAT; #直到done1为真时,结束重复的行动
CLOSE cursorName1;#关闭游标

    #执行另一个游标循环    

OPEN cursorName2;#打开游标
FETCH NEXT FROM    cursorName2 INTO [定义变量1...]; #取游标中的下一条数据放在定义的变量中进行数据处理
REPEAT IF NOT done2 THEN [执行sql语句] END IF; #重复的行动--->如果非done2为真,那么执行对应的sql语句
FETCH NEXT FROM    cursorName1 INTO [定义变量1...]; #继续取游标中的数据放在定义的变量中
UNTIL done2 END REPEAT; #直到done2为真时,结束重复的行动
CLOSE cursorName2;#关闭游标

6.上个步骤执行过程中的,当第一个游标执行完之后,就不会再进行第二个游标的遍历了。因为再执行获取下一条数据时,会触发“NOT FOUND”,致使done2变成了TRUE
7.解决方案:再第一个游标关闭前,重置done2的值【set done2 = FALSE】,或者去除done2的使用,全程使用done1进行控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值