问题描述:现在有一个表有10000W行记录,非常大的表,我知道如果一次性将这10000W放入游标中,循环遍历每一条记录进行处理的话,效率越来越低,最后数据库的undo空间马上用完,所以我想反复执行这个curosr,每次取出100W条进行处理,处理完后再次执行游标再取出100W,直到将这个表中所有数据全部处理完毕,现在想知道如何写这个循环?
我的业务处理规则如下:
定义游标cursor
循环游标cursor
每条进行业务处理后放入数组
最后将数组一次性插入表中
具体结构如下
cursor A is select * from 原始表 A where rownum <=100000 and not exists
(select * from 主键表 B where B.主键 =A.主键 )
LOOP
OPEN A
LOOP
FETCH ....
insert into 主键表 values(主键)
取出每条记录业务处理后放入数组
forall ...inert into 目标表 数组
end loop
close A
end loop
大体就是这样,难点是如果控制循环,如果curosr为空就关闭,就退出,如果不为空,就fetch,处理完100w条后,重新执行curosr再取100w来执行