欢迎来到天天文库
浏览记录
ID:38632149
大小:462.50 KB
页数:7页
时间:2019-06-16
《批量绑定—BULKCOLLECT》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、批量绑定—BULKCOLLECT在PL/SQL编码中,经常会从表中获取结果集,然后进行一些逻辑处理,再生成新的数据。我们想到的最直接的方法就是使用游标。从Oracle8i开始,出现了一个新的子句:BULKCOLLECT。可以降低SQL引擎到PL/SQL引擎的上下文交换(contextswitch)次数,从而实现数据的高速检索。1.速度比较从表中获取结果集,我们常用的方法就是使用游标循环,我们看看它的执行速度:我们再看一下完成同样的功能,BULKCOLLECT的执行速度:BULKCOLLECT要比游标循环快得多。如果你的代码中有游标循环,并且你也正为这里执行缓
2、慢而发愁,不妨试试BULKCOLLECT。2.没有NO_DATA_FOUND异常不过要记得,SELECT...BULKCOLLECTINTO...不会引起NO_DATA_FOUND异常,虽然它的语法看起来和SELECT...INTO...类似。要判断BULKCOLLECT是否获得数据,可以通过COUNT方法:3.其他使用除了SELECTINTO外,还可以在FETCHINTO和RETURNINGINTO子句中使用BULKCOLLECT:4.联合数组中使用BULKCOLLECT前面我们举的例子,都是用的嵌套表,其实也可以使用联合数组:BULKCOLLECT生成的
3、集合,下表是默认从1开始的数字,步进为1,所以联合数组的索引,不能使用varchar2类型。如果你不小心使用了varchar2类型作为联合数组的索引,就会出现下面的错误:5.VARRAY数组中使用BULKCOLLECT而对于VARRAY数组,BULKCOLLECT也适用,不过定义时,其长度必须得大于或等于结果集的长度:如果VARRAY数组长度定义得过小,则会提示错误:如果VARRAY数组长度定义得过大,没什么影响,而且也不会占用多余的内存空间:不过推荐首选联合数组,或是嵌套表,在这里虽然可以使用VARRAY数组,但显然是不太合适的,就像steven所介绍的那
4、样。6.动态SQL中使用BULKCOLLECTOracle9i之前,BULKCOLLECT只能用在静态SQL中,从Oracle9i开始,动态SQL中也可以使用BULKCOLLECT:
此文档下载收益归作者所有