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进行控制。