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

系统 2505 0

本系列文章导航

[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧

[Oracle]高效的PL/SQL程序设计(二)--标量子查询

[Oracle]高效的PL/SQL程序设计(三)--Package的优点

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

[Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集

[Oracle]高效的PL/SQL程序设计(六)--%ROWTYPE的使用

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

类似于下面的结构:

for x( select * from ...)
loop
Processdata;
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
typearray
is table of user_tables % rowtype;
l_dataarray;
cursor c is select * from user_tables;
begin
open c;
loop
fetch c bulk collect into l_datalimitp_array_size;

foralli
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_tablenamedbms_sql.Varchar2_Table;
cursor c is select table_name from user_tables;
begin
open c;
loop
fetch c bulk collect into l_tablenamelimitp_array_size;

foralli
in 1 ..l_tablename. count
insert into t3 values (l_tablename(i));

exit when c % notfound;
end loop;
end ;

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

博文来源: http://blog.csdn.net/huanghui22/archive/2007/05/22/1621290.aspx

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论