CREATE DEFINER=`root`@`%` PROCEDURE `removeAccPartnerSettle`()
BEGIN
#Routine body goes here...
declare removeId int(11) default 0;
# 已经处理数据条目数
declare cnt int(11) default 0;
# 内部批次结束标志
declare done int default 0;
# 转移表数据结构
declare intoCreated datetime(0);
declare intoUpdated datetime(0);
# 处理的最大id
declare splitId int(11);
# 查询剩余条目数
declare tmpCnt int(11);
SELECT max(id) INTO splitId FROM acc_partner_settle_copy1 WHERE state = 1 and created <= '2021-01-01';
while cnt < 30000 do
# 一次处理条目数
SELECT COUNT(1) INTO tmpCnt FROM acc_partner_settle_copy1 WHERE state = 1 and id <= splitId;
# 游标
BEGIN
# 建立游标并且重新给予变量类型
declare cur cursor for SELECT
`id` AS removeId,
`created` AS intoCreated,
`updated` AS intoUpdatedFROM acc_partner_settle_copy1
WHERE state = 1 and id <= splitId LIMIT 0, 3000;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
# 开启游标
OPEN cur;
# 游标开始循环
READ_LOOP:LOOP
# 提取游标值
FETCH cur INTO removeId,intoCreated,intoUpdated;
# 游标结束标志, 需要中止游标
IF done THEN
LEAVE READ_LOOP;
END IF;
# =================================== 代码
SET cnt = cnt + 1;
# 插入新表
INSERT INTO `acc_partner_settle_new`(`id`, `created`, `updated`) VALUES (removeId, intoCreated, intoUpdated);
# 删除旧值
DELETE FROM acc_partner_settle_copy1 WHERE id = removeId;
# =================================== 代码
END LOOP;
# 关闭游标
CLOSE cur;
END;
# 数据条目数已经不足一个批次了, 修改条件, 跳出循环
IF tmpCnt < 3000 THEN
SET cnt = 99999999;
END IF;
# 重置游标标志
set done = 0;
end while;
END