存储过程遍历更新

Posted GE12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程遍历更新相关的知识,希望对你有一定的参考价值。

CREATE DEFINER=`root`@`%` PROCEDURE `init_reportUrl`()
BEGIN
    -- 定义变量
    DECLARE s INT DEFAULT 0;
    DECLARE cid bigint(11);
    DECLARE aa VARCHAR(11);

    -- 定义游标,并将sql结果集赋值到游标中
    DECLARE report CURSOR FOR SELECT id,a  FROM ab;
    -- 声明当游标遍历完后将标志变量置成某个值
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
    -- 打开游标
    OPEN report;
        FETCH report INTO cid,aa;
        -- 当s不等于1,也就是未遍历完时,会一直循环
        WHILE s<>1 DO
            -- 执行业务逻辑
            -- code放在这里表示没遍历一次重新生成一次
        
          UPDATE ab2  set a=(SELECT a from ab where id=cid) where id=cid ;
        
            -- 将游标中的值再赋值给变量,供下次循环使用
        FETCH report INTO cid,aa;
        -- 当s等于1时表明遍历以完成,退出循环
        END WHILE;
    -- 关闭游标
    CLOSE report;
END

以上是关于存储过程遍历更新的主要内容,如果未能解决你的问题,请参考以下文章

mysql使用游标遍历数据进行批量针对性更新数据,急求mysql大神解答

多个存储过程调用或遍历数组?

利用mysql存储过程循环插入新数据并更新

LINQ和存储过程DBML更新问题

mysql全表遍历为啥耗时

mysql存储过程如何遍历字符串的每个字符,并把每个字符转换成int(假设都是数字字符)?