zoukankan      html  css  js  c++  java
  • 将一个表字段更新到另一个表字段,数据量大使用存储过程不会锁表

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

    -- 取值设置到临时变量中
    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();
    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    修饰符组合
    嵌入式C摘录
    c语言记事 关于extern和static
    iphone 设置iTunes共享目录
    MapKit 相关
    关于viewDidLoad在[super init]之前执行的问题
    UIScrollView相关
    ASIHttpRequest 学习
    iPhone Locate定位
    UTF7 编码转换
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/14417249.html
Copyright © 2011-2022 走看看