[Oracle]高效的PL/SQL程序设计(四)--批量处理

 

批量处理一般用在ETL操作, ETL代表提取(extract),转换(transform),装载(load), 是一个数据仓库的词汇!

类似于下面的结构:

for  x ( select   *   from ...)
loop
    Process data;
    
insert   into   table   values (...);
end  loop;

 

一般情况下, 我们处理大笔的数据插入动作, 有2种做法, 第一种就是一笔笔的循环插入

create   table  t1  as   select   *   from  user_tables  where   1 = 0 ;
create   table  t2  as   select   *   from  user_tables  where   1 = 0 ;
create   table  t3  as   select  table_name  from  user_tables  where   1 = 0 ;

 

create   or   replace   procedure  Nor_Test
as
begin
     
for  x  in ( select   *   from  user_tables)
     loop
         
insert   into  t1  values  x;
     
end  loop;
end ;

第2种方法就是批量处理(insert全部字段):

create   or   replace   procedure  Bulk_Test1(p_array_size  in   number )
as
 type array 
is   table   of  user_tables % rowtype;
 l_data array;
 
cursor  c  is   select   *   from  user_tables;
begin
     
open  c;
     loop
         
fetch  c  bulk  collect  into  l_data limit p_array_size;
         
         forall i 
in   1 ..l_data. count
                
insert   into  t2  values  l_data(i);
         
         
exit   when  c % notfound;
     
end  loop;
end ;

insert部分字段:

create   or   replace   procedure  Bulk_Test2(p_array_size  in   number )
as
 l_tablename dbms_sql.Varchar2_Table;
 
cursor  c  is   select  table_name  from  user_tables;
begin
     
open  c;
     loop
         
fetch  c  bulk  collect  into  l_tablename limit p_array_size;
         
         forall i 
in   1 ..l_tablename. count
                
insert   into  t3  values  (l_tablename(i));
         
         
exit   when  c % notfound;
     
end  loop;
end ;

在性能方面批量处理有着很大的优势, p_array_size一般默认都是100

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值