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

Oracle批量处理技巧
本文介绍Oracle数据库中批量处理的方法及其实现方式,包括通过循环逐条插入数据和使用批量插入提高效率的技术细节。同时对比了两种不同的批量处理方法,并提供了具体的实现代码。
部署运行你感兴趣的模型镜像

本系列文章导航

[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.youkuaiyun.com/huanghui22/archive/2007/05/22/1621290.aspx

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值