ITPub博客

首页 > Linux操作系统 > Linux操作系统 > bulk forall 的测试(转)

bulk forall 的测试(转)

原创 Linux操作系统 作者:zhouwf0726 时间:2019-03-18 16:00:05 0 删除 编辑
bulk forall 的测试

SQL> select count(*) from limit_tmp;

COUNT(*)
----------
700750

create table limit_bak as select CUST_CODE,PROD_CODE,DAY_LIMIT from limit_tmp where 1=2;

create table limit_bak1 as select CUST_CODE,PROD_CODE,DAY_LIMIT from limit_tmp where 1=2;

create table limit_bak2 as select CUST_CODE,PROD_CODE,DAY_LIMIT from limit_tmp where 1=2;

用一般的方式插入
begin
for c1 in (select cust_code,prod_code,day_limit from limit_tmp) loop
insert into limit_bak2 values (c1.cust_code,c1.prod_code,c1.day_limit);
end loop;
commit;
end;

PL/SQL procedure successfully completed

Executed in 42.515 seconds

用 bulk collect + forall 的方式插入数据
declare
TYPE custtab IS TABLE OF varchar2(12)
INDEX BY BINARY_INTEGER;
TYPE prodtab IS TABLE OF VARCHAR2(8)
INDEX BY BINARY_INTEGER;
TYPE limittab IS TABLE OF NUMBER(12,2)
INDEX BY BINARY_INTEGER;

custarr custtab;
prodarr prodtab;
limitarr limittab;
begin
select cust_code,prod_code,day_limit bulk collect into custarr,prodarr,limitarr
from limit_tmp;
forall i in 1 .. custarr.count
insert into limit_bak1 values (custarr(i),prodarr(i),limitarr(i));
commit;
end;

PL/SQL procedure successfully completed

Executed in 6.515 seconds

直接语句插入
insert into limit_bak select cust_code,prod_code,day_limit from limit_tmp;

700750 rows inserted

Executed in 3.125 seconds

可见还是通过语句直接插入的最快,但是在需要在程序中批量插入的时候,bulk 和forall的确是可以提高速度的。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/756652/viewspace-242162/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle执行java代码
请登录后发表评论 登录
全部评论

注册时间:2006-02-22

  • 博文量
    458
  • 访问量
    416607