将一个表所需数据查出来存到集合变量中,然后循环游标更新另一张表。
-- 取值设置到临时变量中
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();