mysql 游标循环失效问题
2016-01-18 09:35
627 查看
我们在写存储过程的时候,通常会用到游标,游标的格式为:
DECLARE i_done tinyint(1) default 0;//定义是否继续循环的标志
DECLARE cur_execution cursor for
select i_test1,i_test2 from t ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET i_done=1; //定义没有找到游标了就标志位就设置为1,要结束循环
open cur_execution ;//打开游标
exe_loop:LOOP//exe_loop为自定义的名字
fetch cur_execution into v_test1,v_test2;
if i_done =1 then
leave exe_loop;//如果标志位为1了就结束循环
end if;
select * from tableName;
................
//这里是你要处理的过程,可以写很多的语句,包括select语句等
end loop;
close cur_execution ;//关闭游标
在处理过程中,我发现如果在处理过程的过程当中,如果有一个select语句没有查询出数据,就会结束循环,这不是我们想要的,我们想要的即时是在其中的一个select 语句中没有查询的数据,也要继续循环,知道游标定义的数据全部循环完。
为了避免这种情况出现,我们需要在每个select 语句后重置循环标志位为0,让他继续循环下去;
select * from tableName;
set i_done = 0;//这里很关键
DECLARE i_done tinyint(1) default 0;//定义是否继续循环的标志
DECLARE cur_execution cursor for
select i_test1,i_test2 from t ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET i_done=1; //定义没有找到游标了就标志位就设置为1,要结束循环
open cur_execution ;//打开游标
exe_loop:LOOP//exe_loop为自定义的名字
fetch cur_execution into v_test1,v_test2;
if i_done =1 then
leave exe_loop;//如果标志位为1了就结束循环
end if;
select * from tableName;
................
//这里是你要处理的过程,可以写很多的语句,包括select语句等
end loop;
close cur_execution ;//关闭游标
在处理过程中,我发现如果在处理过程的过程当中,如果有一个select语句没有查询出数据,就会结束循环,这不是我们想要的,我们想要的即时是在其中的一个select 语句中没有查询的数据,也要继续循环,知道游标定义的数据全部循环完。
为了避免这种情况出现,我们需要在每个select 语句后重置循环标志位为0,让他继续循环下去;
select * from tableName;
set i_done = 0;//这里很关键
相关文章推荐
- MySQL Online DDL
- mysql处理数据库中的部分数据
- MySql的join(连接)查询 (三表 left join 写法)
- MySQL:MySQL日期数据类型、MySQL时间类型使用总结
- NodeJs对Mysql封装
- Mysql存储过程
- MySQL中create table as 与like的区别分析
- MySQL中对于索引的基本增删查改操作总结
- mysql 字段类型优化建议
- hive 连接mysql
- mysql limt参数
- mysql之光标cursor【整理】
- 005-LAMP_MySQL binary installation
- Mysql存储过程查询结果赋值到变量的方法
- mysql之基本函数【整理】
- mysql之控制语句【整理】
- mysql limit 优化
- 004-LAMP_MySQL_overview
- mysql之函数【整理】
- Mysql-5.6乱码问题