mysql存储过程repeat循环多循环一次

举报
仙士可 发表于 2023/06/14 11:23:56 2023/06/14
【摘要】 游标repeat循环实例:CREATE PROCEDURE `test`.`new_procedure` ()BEGIN-- 需要定义接收游标数据的变量 DECLARE a CHAR(16); -- 游标 DECLARE cur CURSOR FOR SELECT i FROM test.t; -- 遍历数据结束标志 DECLARE done INT DEFAULT 0; --...

游标repeat循环实例:

CREATE PROCEDURE `test`.`new_procedure` ()BEGIN-- 需要定义接收游标数据的变量 
  DECLARE a CHAR(16);  -- 游标
  DECLARE cur CURSOR FOR SELECT i FROM test.t;  -- 遍历数据结束标志
  DECLARE done INT DEFAULT 0;  -- 将结束标志绑定到游标
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  -- 打开游标
  OPEN cur;  
  -- 开始循环  read_loop: LOOP    -- 提取游标里的数据,这里只有一个,多个的话也一样;
    FETCH cur INTO a;    -- 声明结束的时候
    IF done THEN
      LEAVE read_loop;    END IF;    -- 这里做你想做的循环的事件

    INSERT INTO test.t VALUES (a);  END LOOP;  -- 关闭游标
  CLOSE cur;END
复制

由于repeat循环相当于do whlie的形式,先执行再判断条件是否满足,从而导致了会多循环一次,解决方法如下

/*把do while形式的循环改成while*/
if not b then
select var_id;
   set var_value = concat('testName:',var_id);
/*insert into test values(var_id,var_value);*/
end if;
until done=1
end repeat;
close cur;
END;
复制
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。