最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

多行数据的批处理之bulkcollect

来源:懂视网 责编:小采 时间:2020-11-09 15:14:44
文档

多行数据的批处理之bulkcollect

多行数据的批处理之bulkcollect:在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。 在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。 类似下面的格式declare curso
推荐度:
导读多行数据的批处理之bulkcollect:在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。 在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。 类似下面的格式declare curso

在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。

在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。
类似下面的格式
declare
cursor xxxx is xxxxx;
begin
loop cur in xxxxx loop
xxxxx
end loop;
end;
/

如果cursor中包含的数据太多的时候,可能会有性能问题,性能的考虑主要在于pl/sql引擎和sql引擎的切换,和编程中的上下文环境是类似的。
这个时候可以考虑采用bulk collect 的方式直接一次性读取数据岛缓存然后从缓存中进一步处理。
这种方式可以打个比方比较形象,比如 你带着一个新人去完成一个任务,可能一天他要问你100个问题,你是希望他每隔几分钟想到了就问你呢,还是让他自己把问题积累起来,专门设定一个时间来集中回答呢。可能你在忙另外一个事情,他问你一个问题,这个时候就会有上下文环境的切换,等你回答了之后,继续工作的时候,,又一个问题来了,这时候又得进行一次切换。。
比方说我们设定一个表test,希望把test里面的数据选择性的插入到test_all中去
实现的原始Pl/sql如下:
declare
cursor test_cursors is select object_id,object_name from test;
begin
for test_cursor in test_cursors loop
dbms_output.put_line('object_id: '||test_cursor.object_id);
insert into test_all values(test_cursor.object_id,test_cursor.object_name);
end loop;
commit;
end;
/

如果采用bulk collect 方式,就会是如下的方式:
declare
type id_t is table of test.object_id%type;
type name_t is table of test.object_name%type;
object_id id_t;
object_name name_t;
cursor test_cursors is select object_id,object_name from test;
begin
open test_cursors;
fetch test_cursors bulk collect into object_id,object_name;
close test_cursors;
for i in object_id.FIRST .. object_id.LAST loop
dbms_output.put_line('object_id: '||object_id(i));
insert into test_all values(object_id(i),object_name(i));
end loop;
commit;
end;
/


或者采用隐式游标的方式:
declare
type id_t is table of test.object_id%type;
type name_t is table of test.object_name%type;
object_id id_t;
object_name name_t;
begin
select object_id,object_name bulk collect into object_id,object_name from test where rownum<20;
for i in object_id.FIRST .. object_id.LAST loop
dbms_output.put_line('object_id: '||object_id(i));
insert into test_all values(object_id(i),object_name(i));
end loop;
commit;
end;
/

本文永久更新链接地址:

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

多行数据的批处理之bulkcollect

多行数据的批处理之bulkcollect:在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。 在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。 类似下面的格式declare curso
推荐度:
标签: 处理 数据 数据的
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top