MySQL游标:最后一行遍历两次

在MySQL的存储过程中,遇到一个关于游标的bug,即在遍历过程中,最后一行的数据被重复处理了两次。问题源于在循环结束时未正确处理fetch操作的失败情况,导致了前一次数据的重复插入。为解决这个问题,需要在循环中判断fetch操作是否成功,避免对同一行数据进行多次操作。参考了相关博客文章进行修正。
摘要由CSDN通过智能技术生成

遇到一个问题: 在存储过程中使用MySQL的游标时,最后一行遍历了两次。存储过程的代码示例如下:

delimiter //
drop procedure if exists processorders;
create procedure processorders()
begin
   -- 声明一个boolean变量
   declare done boolean default 0;
   -- 声明一个变量
   declare o int;
   declare t decimal(8,2);
   -- 定义游标
   declare ordernumbers cursor for select order_num from orders;
   
   -- 定义一个continue handler
   declare continue handler for SQLSTATE '02000' set done=1;
   
   -- 创建一个表,用于存放查询结果
   drop table if exists ordertotals;
   create table if not exists ordertotals (order_num int, total decimal(8,2));
   -- 打开游标
   open ordernumbers;
   -- 使用游标,在游标中取出第一行
   -- fetch ordernumbers into o;
   -- 遍历游标
   repeat
      -- 从由表中按顺序取值
      fetch ordernumbers into o;
      -- 调用之前的存储过程
      call ordertotal(o,1, t);
      -- 将结果插入到表中
      -- select o;
      insert into ordertotals(order_num, total) values(o, t);
   -- 结束遍历
   until done end 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值