Oracle 的 bulk collect用法
採用bulk collect可以將查詢結果一次性地載入到collections中,而不是透過cursor一條一條地處理。
可以在select into,fetch into,returning into語句使用bulk collect。
注意:在使用bulk collect時,所有的into變數都必須是collections。
create table t_test as
select object_id, object_name, object_type
from dba_objects
where wner = 'TEST';
1、在select into語句中使用bulk collect
declare
type object_list is table of t_test.object_name%type;
objs object_list;
begin
select object_name bulk collect
into objs
from t_test
where rownum <= 100;
for r in objs.first .. objs.last loop
dbms_output.put_line(' objs(r)=' || objs(r));
end loop;
end;
/
2、在fetch into中使用bulk collect
declare
type objecttab is table of t_test%rowtype;
objs objecttab;
cursor cob is
select object_id, object_name, object_type
from t_test
where rownum <= 10;
begin
open cob;
fetch cob bulk collect
into objs;
close cob;
for r in objs.first .. objs.last loop
dbms_output.put_line(' objs(r)=' || objs(r).object_name);
end loop;
end;
/
以上為把結果集一次fetch到collect中,我們還可以透過limit引數,來分批fetch資料,如下:
declare
type objecttab is table of t_test%rowtype;
objs objecttab;
cursor cob is
select object_id, object_name, object_type
from t_test
where rownum <= 10000;
begin
open cob;
loop
fetch cob bulk collect
into objs limit 1000;
exit when cob%notfound;
dbms_output.put_line('count:' || objs.count || ' first:' || objs.first ||
' last:' || objs.last);
for r in objs.first .. objs.last loop
dbms_output.put_line(' objs(r)=' || objs(r).object_name);
end loop;
end loop;
close cob;
end;
/
你可以根據實際來調整limit引數的大小,來達到最優的效能。limit引數會影響到PGA的使用率。
3、在returning into中使用bulk collect
declare
type id_list is table of t_test.object_id%type;
ids id_list;
type name_list is table of t_test.object_name%type;
names name_list;
begin
delete from t_test
where object_id <= 87510 returning object_id, object_name bulk collect into ids,
names;
dbms_output.put_line('deleted ' || sql%rowcount || ' rows:');
for i in ids.first .. ids.last loop
dbms_output.put_line('object #' || ids(i) || ': ' || names(i));
end loop;
end;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-683746/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- pl/sql中bulk collect的用法SQL
- oracle中bulk collect into用法 (批次效率提取遊標資料)Oracle
- Oracle資料庫的BULK COLLECT用法之批量增刪改<轉>Oracle資料庫
- 使用Bulk Collect提高Oracle查詢效率Oracle
- 一次遷移思考的記錄--bulk_collect的limit用法MIT
- 使用oracle bulk collect 提高select FETCH LOOP的速度OracleOOP
- 【PL/SQL】初試 bulk collectSQL
- Oracle中巧用bulk collect實現cursor批次fetchOracle
- BULK COLLECT FAILS WITH ORA-04030AI
- [20180110]Oracle Bulk Collect and LimitOracleMIT
- 使用BULK COLLECT+FORALL加速批量提交
- APPEND,bulk collect,正常插入比較APP
- oracle10g_plsql_rercursor_type_table of_小引例_bulk collect intoOracleSQL
- 多行資料的批處理之bulk collect
- 用BULK COLLECT 減小LOOP的開銷(1)OOP
- [20180111]Oracle Bulk Collect and Limit2OracleMIT
- PL/SQL LOB和檔案操作,bulk collectSQL
- 使用bulk collect實現cursor 批量fetch!
- 使用Forall 與bulk collect的快速複製表資料
- 遊標+bulk collect into limit的不同方法查詢資料MIT
- 轉摘plsql高階程式設計_table_array_for all_bulk collect into_fetchSQL程式設計
- bulk_collect結合dbms_application_info監控資料處理進度APP
- oracle bulk collects 之 java selectOracleJava
- 講透JAVA Stream的collect用法與原理,遠比你想象的更強大Java
- Elasticsearch的Bulk API使用ElasticsearchAPI
- Oracle Hints的用法Oracle
- oracle job的用法Oracle
- Oracle keep的用法Oracle
- Oracle Analyze的用法Oracle
- Oracle中with的用法Oracle
- Oracle Hint的用法Oracle
- Oracle的Cast的用法OracleAST
- Oracle學習系列—資料庫優化—Collect StatisticsOracle資料庫優化
- Go 語言中的 collect 使用Go
- Oracle PL/SQL 優化與調整 -- Bulk 說明OracleSQL優化
- ORACLE WITH AS 用法Oracle
- oracle comment on的用法Oracle
- oracle explain plan for的用法OracleAI