MySQL游标的使用
使用游标的步骤大致为:创建游标打开游标循环读取,难点在于判断数据是否已经读取完关闭游标假设现在有一个netbar_duty表用于存放交接班数据(每条交接班数据包含交接班的开始时间dutyBeginTime和结束时间dutyEndTime),现在使用游标来遍历每个交接班的开始时间和结束时间。SQL脚本中已经针对游标的用法给出了详细的注释。CREATE DEFINER=`ro...
·
使用游标的步骤大致为:
- 创建游标
- 打开游标
- 循环读取,难点在于判断数据是否已经读取完
- 关闭游标
假设现在有一个netbar_duty
表用于存放交接班数据(每条交接班数据包含交接班的开始时间dutyBeginTime
和结束时间dutyEndTime
),现在使用游标来遍历每个交接班的开始时间和结束时间。
SQL脚本中已经针对游标的用法给出了详细的注释。
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `testCursor`()
SQL SECURITY INVOKER
lab:BEGIN
DECLARE begin_time DATETIME;
DECLARE end_time DATETIME;
-- 专门用来标记数据行是否读取完成
DECLARE done INT DEFAULT FALSE;
-- 创建一个游标cur,数据集为从netbar_duty表中获取的交接班的开始时间和结束时间
DECLARE cur CURSOR FOR SELECT dutyBeginTime, dutyEndTime FROM netbar_duty;
-- 虽然FETCH无法返回数据行是否已经读取完,但在数据行读取完之后再次读取会引发NOT FOUND异常,
-- 所以这里我们针对NOT FOUND异常来对done变量进行赋值,从而标记数据已经读取完成。
-- DECLARE...HANDLER的具体用法见:http://blog.csdn.net/china_jeffery/article/details/79284051
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标cur
OPEN cur;
-- 循环读取
read_loop:
LOOP
-- 获取一条数据,游标自动指向下一行
FETCH cur INTO begin_time, end_time;
-- 检查数据是否读取完成
IF done THEN
LEAVE read_loop;
END IF;
-- 模拟使用刚才拿出来的数据
select begin_time, end_time;
END LOOP;
-- 关闭游标
CLOSE cur;
END
更多推荐
已为社区贡献5条内容
所有评论(0)