将一个表字段更新到另一个表字段,数据量大使用存储过程不会锁表

将一个表所需数据查出来存到集合变量中,然后循环游标更新另一张表。

-- 取值设置到临时变量中
FETCH ossList INTO oss,cdkey;

 

复制代码
DROP PROCEDURE IF EXISTS staff_zt_test;
-- 存储过程
CREATE PROCEDURE staff_zt_test()
BEGIN
    -- 该变量用于标识是否还有数据需遍历
    DECLARE flag INT DEFAULT 0;
    -- 创建一个变量用来存储遍历过程中的值
    DECLARE oss VARCHAR(64);
    DECLARE cdkey VARCHAR(255);
    -- 查询出需要遍历的数据集合
    DECLARE ossList CURSOR FOR (select a.oss,a.cdkey from account a WHERE a.oss is not null);
    -- 查询是否有下一个数据,没有将标识设为1,相当于hasNext
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
    -- 打开游标
    OPEN ossList;
        -- 取值设置到临时变量中
        FETCH ossList INTO oss,cdkey;
        -- 遍历未结束就一直执行
        WHILE flag != 1 DO
                -- targetSQL //你想要执行的目标功能,这里可以写多个SQL
                
                --   注意
                -- 这里有一个坑,目标语句引用临时变量,实测发现不需要加@符号,但是搜索到的结果都是例如:@id ,这样来使用,实测发现无法取到数据
                --   注意
                update created_player cp set cp.oss =oss where cp.account = cdkey;
                -- 一定要记得把游标向后移一位,这个坑我替各位踩过了,不需要再踩了
                FETCH ossList INTO oss,cdkey;
                -- FETCH cdkeyList INTO cdkey;
        END WHILE;
    CLOSE ossList;
END;
-- 执行存储过程 call staff_zt_test();
复制代码

 

本文作者:好Wu赖

本文链接:https://www.cnblogs.com/erlongxizhu-03/p/14417249.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   好Wu赖  阅读(442)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2020-02-19 mybatis多表查询,@select,包括动态条件
2020-02-19 thymeleaf 引入外部html
2019-02-19 正则表达式基础
2019-02-19 spring+springmvc+hibernate 框架搭建
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起