Oracle中的Bulk Collect
2010-11-24 16:15
148 查看
bulk collect的作用
将查询出来的多条记录以集合的方式打包。
举例:
创建表
插入内容如下
匿名块
这里numbers类型的元素是Oracle基本类型number。所以可以直接将多条记录打包放进去,如果numbers类型的元素是Object类型呢,这种情况的示例代码如下
bulk collect into会将对象之前的数据给覆盖
示例:
本文出自 “linux要从娃娃抓起” 博客,请务必保留此出处http://wanqiufeng.blog.51cto.com/409430/431486
将查询出来的多条记录以集合的方式打包。
举例:
创建表
create table bc ( a number, b varchar2(10) ); |
insert into bc_3 values (1, 1); insert into bc_3 values (2, 1); insert into bc_3 values (3, 1); insert into bc_3 values (4, 2); insert into bc_3 values (5, 2); insert into bc_3 values (6, 2); insert into bc_3 values (7, 2); insert into bc_3 values (8, 3); insert into bc_3 values (9, 3); |
declare type numbers is table of number index by binary_integer; n numbers; begin select a bulk collect into n from bc_3 where b=1; for i in 1 .. n.count loop dbms_output.put_line(n(i)); end loop; end; 这里将b=1的所有记录的a值打包后一起放进numbers类型的b中。 |
有Object类型声明如下: create or replace type varchar_number as object( a number, i number ) --------------------------------------------------------------------- 匿名块中的table类型t_varchar_number,其元素是varchar_number类型的object declare type t_varchar_number is table of varchar_number index by binary_integer; n t_varchar_number; begin select varchar_number(a,b) bulk collect into n from bc_3 where b=1; for i in 1 .. n.count loop dbms_output.put_line(n(i).a); end loop; end; 说明:按照java中的话来说相当于在打包前,先用object类型的构造方法将其打包成对象,然后在打包。 |
示例:
create table bc_3 ( a number, b number ); insert into bc_3 values (1, 1); insert into bc_3 values (2, 1); insert into bc_3 values (3, 1); insert into bc_3 values (4, 2); insert into bc_3 values (5, 2); insert into bc_3 values (6, 2); insert into bc_3 values (7, 2); insert into bc_3 values (8, 3); insert into bc_3 values (9, 3); declare type numbers is table of number; n numbers; begin select a bulk collect into n from bc_3 where b=1; select a bulk collect into n from bc_3 where b=3; for i in 1 .. n.count loop dbms_output.put_line(n(i)); end loop; end; 匿名块执行的结果是:8,9 因为“select a bulk collect into n from bc_3 where b=3; ”的结果“8,9”会将先执行“select a bulk collect into n from bc_3 where b=1; ”的结果“1,2,3”覆盖。 如果想累计的话,就得把bulk去掉,或者把bulk collect去掉。也就是说collect into 和into效果是一样的,都会累计,不会覆盖。 |
相关文章推荐
- Oracle中的Bulk Collect和FORALL
- Oracle 批绑定(batch bind)FORALL, BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- day13_普通表转换成分区表——oracle学习之bulk collect用法
- oracle批量绑定 forall bulk collect用法以及测试案例
- Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
- 转:Oracle 10g批量绑定forall bulk collect
- oracle学习之bulk collect用法
- oracle bulk collect is table of 批量操作
- oracle学习之bulk collect用法
- oracle学习之bulk collect用法
- ORACLE 游标 批量提取数据 FETCH BULK COLLECT
- oracle常用的复合数据类型 : BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer
- oracle之性能-forall、BULK COLLECT
- oracle常用的复合数据类型 : BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer
- 再收藏一篇: oracle批量绑定 forall bulk collect用法以及测试案例
- 2013-11-11 Oracle 课堂测试 练习题 例:BULK COLLECT及return table
- ORACLE 批量绑定 FORALL 与 BULK COLLECT
- Oracle学习之BULK COLLECT用法
- Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据