mysql存储过程使用mysql,存储过程,游标实现⼀次数据的批量修改
背景
今天线上碰到⼀个问题,现场进⾏了两个服务器的迁移,数据库也进⾏了合并,导致表adm_dev的REGIST_PROXY_PORT字段出现重复数据(暂时
不考虑表结构设计问题),现在需要把此重复的数据修改
#⼀ 使⽤mysql⾃带的语法实现
    UPDATE mytable SET
        myfield = CASE id
            WHEN 1 THEN ‘value’
            WHEN 2 THEN ‘value’
            WHEN 3 THEN ‘value’
        END
    WHERE id IN (1,2,3)
    由于case when语法的原因,解决⼤批量数据就需要超级长的sql,不适合我的场
#⼆ 使⽤存储过程,和游标实现
    create procedure pa() – 创建存储过程
        BEGIN
            DECLARE deviceCode varchar(50); – 定义变量
            DECLARE proxyPort int ; – 定义变量
            DECLARE My_Cursor CURSOR FOR (SELECT device_code FROM dss.adm_dev where id in(1,2,3)); – 创建游标并且给游标赋值
            OPEN My_Cursor; – 打开游标
            FETCH NEXT FROM My_Cursor INTO deviceCode; – 取游标的第⼀⾏数据赋值给deviceCode变量
            set proxyPort = 99; – proxyPort变量初始化
            www:loop – 循环进⾏修改
                UPDATE dss.adm_dev SET REGIST_PROXY_PORT = proxyPort WHERE device_code = deviceCode;
                set proxyPort = proxyPort+1;
                FETCH NEXT FROM My_Cursor INTO deviceCode;
            end loop; – 循环结束
            CLOSE My_Cursor; – 关闭游标
        END;
    call pa(); – 调⽤存储过程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。