MySQL游标的使用步骤
程序员文章站
2022-04-12 20:22:51
使用游标的步骤大致为:
创建游标 打开游标 循环读取,难点在于判断数据是否已经读取完 关闭游标
假设现在有一个netbar_duty表用于存放交接班数据(包含交接班的开始时间d...
使用游标的步骤大致为:
创建游标 打开游标 循环读取,难点在于判断数据是否已经读取完 关闭游标
假设现在有一个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的具体用法见:https://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
上一篇: javascript面向对象中继承实现?
下一篇: python插入排序实例讲解