背景:
将正表的数据备份到历史表里,且删除正表的数据
方案
1 先将要备份的数据的主键全部放到一张临时表,且将临时表加索引
2 从临时表去查找正表数据,然后备份该条数据到历史表里,然后删除正表数据
在删除临时表数据(在查找临时表的时候,可以使用mod函数将该字段取余,起多个线程去做,
可以实现数据不重复处理问题).
解决方案实现
1:创建临时表
create tabel task_chl_statuscd1100107 as select contact_task_chl_id from task_chl
2: 为临时表创建索引
3:创建存储过程(该存储过程可以替换为代码实现),作者循环调用存储过程
create or replace procedure toTaskChl(i_size in number) is
v_insertSql varchar2(500);
v_tableDate varchar2(500);
begin
--这里使用了mod函数的方式取数,然后代码调用该存储过程的时候,可以多线程,传不通的值
-- 就不会出现取到重复的数据
for r in (select *
from task_chl_statuscd1100107
where mod(contact_task_chl_id, 1) = i_size
and rownum < 5001) loop
select to_char(a.create_Date, 'yyyyMM')
into v_tableDate
from contact_task_chl a
where a.contact_task_chl_id = r.contact_task_chl_id;
v_insertSql := 'insert into contact_task_chl_' || v_tableDate |