UPDATE my_emp SET sal=sal*1.20 WHERE deptno=&deptno RETURNING ename,sal BULK COLLECT INTO v_ename_table,v_sal_table; FOR i IN 1..v_ename_table.COUNT LOOP dbms_output.put_line('EMPLOYEE_INFO:'||v_ename_table(i)||','||v_sal_table(i)); END LOOP; END; 说明部分: 1.%TYPE和my_...
V_SOURCE_ROWS t_tbl_a_rows;--定义一个用于存储TBL_B新ID的数组TYPE t_idsISTABLEOFTBL_B.ID%TYPEINDEXBYPLS_INTEGER; v_ids t_ids;--假设我们一次处理100条记录v_limit CONSTANT PLS_INTEGER :=100;BEGIN--使用BULK COLLECT批量从TBL_A中获取数据SELECT*BULKCOLLECTINTOV_SOURCE_ROWSFROMTBL_AWHEREROWNUM...
--将n行游标数据放到表中 FETCH CUR_FIRST_INDEX BULK COLLECT INTO TAB_FIRST_INDEX LIMIT 1; -- 数据量太少,仅当前测试使用哦,实际开发建议 500 左右 -- 退出条件 EXIT WHEN TAB_FIRST_INDEX.COUNT = 0; --循环表数据 FORALL I IN TAB_FIRST_INDEX.FIRST .. TAB_FIRST_INDEX.LAST LOOP DBMS_OUTPUT...
UPDATE acct SET bal=bal*1000 WHERE parent_fund='320001054663' RETURNING fund,bal BULK COLLECT INTO v_fund_table,v_bal_table; FOR i IN 1..v_fund_table.COUNT LOOP dbms_output.put_line('ACCT:'||v_fund_table(i)||','||v_bal_table(i)); END LOOP; END; 说明部分: 1. %TYPE和 acct...
emp_cur 25 BULK COLLECT INTO emp_tab 26 LIMIT v_limit; -- 使用limit子句限制提取数据量 27 28 EXIT WHEN emp_tab.COUNT = 0; -- 注意此时游标退出使用了emp_tab.COUNT,而不是emp_cur%notfound 29 v_counter := v_counter + 1; -- 记录使用LIMIT之后fetch的次数 30 31 FOR i IN emp_tab....
Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使用批查询,批查询在某些情况下能显著提高查询效率。 采用bulk collect可以将查询结果一次性地加载到collections中。 而不是通过cursor一条一条地处理。 可以在select into,fetch into,returning into语句使用bulk collect。
SSMA 为 Oracle 集合提供迁移路径。 但是,如果SELECT用于填充集合的语句使用DISTINCT子句,SSMA 将生成错误消息。 示例 在以下示例中,语句SELECT与子句和BULK COLLECT INTO子句一起使用DISTINCT: CREATEORREPLACEPROCEDUREBULK_COLLECT_WITH_DISTINCTASBEGINDECLARETYPEtbl_type_DNAMEISTABLEOFvarchar2(14); ...
fetch cur bulk collect into recs limit 1000000; //捆绑插入(减少与服务器交互的次数) forall i in 1..recs.count insert /*+ append */into IALHospitalInfo values recs(i); commit; exit when cur%notfound; end loop; close cur; end;
You can see an example of thishere. Updates In Oracle 10g and above, the optimizing PL/SQL compiler rewrites conventional cursor for loops to use aBULK COLLECTwith aLIMIT 100, so code that previously didn't take advantage of bulk binds may now run faster. ...
Collect批查询在某种程度上可以提高查询效率,它首先将所需数据读入内存,然后再统计分析,这样就可以提高查询效率。但是,如果Oracle数据库的内存较小,Shared Pool Size不足以保存Bulk Collect批查询结果,那么该方法需要将Bulk Collect的集合结果保存在磁盘上,在这种情况下,Bulk ...