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小时内删除。
发表评论