注册 登录
编程论坛 Oracle论坛

关于oracle存储过程全表扫描处理百万数据的速度问题

xzzhangzhao 发布于 2011-07-13 09:58, 1088 次点击
今天做数据处理的时候遇到一个问题,就是要把一个表A中的某个字段的数据经过处理以后再插入到表B中。一开始用到的是游标,不过最后发现速度跟本不行,执行半天还没完。。。
A表中有800万数据。
具体的逻辑是这样的,就是A表中有一个字段type,这个type中有多个值,其中是以,号隔开的。比如:010,030,020.
现在的情况是我要把A表中的type字段中的值拿出来然后以,号隔开,变成010  030 020 三个值,然后作为三条记录放到表B的字段type 中。在B表中记录会是这样
id  type
1    010
2    030
3    020
三条记录。
存储过程是这样
程序代码:
type cur is ref cursor

v_resultset cur;
v_resultset1 cur;
v_type varchar2(10);
v_type2 varchar2(30);
open  v_resultset for select type from A;
loop
fetch v_resultset into v_type;
    open resultset1 for select * from table( split(v_type,','));--split是自己写的函数,分隔字符串后得到的是一个集合,还得循环。。。
    loop
       fetch resultset1 into v_type2;
        insert into B values(v_type2);
        close resutlset1;
      end loop;
      close resultset2;
end loop;
commit;
exception
  处理

就是这样,速度异常的慢。不过小北刚接触oracle存储过程,不知道有没有其它的好的实现方式。先谢谢大家了。像上面这个是循环套循环,速度一定会慢的。但是自己实在是想不到有没有更好的解决办法了。希望有经验的大大们不吝赐教!先谢谢了
0 回复
1