oracle 数据库 sql : 关于多个多个返回值得集合查询

正常的情况下SELECT信息1BULKCOLLECTINTOOUTPUT1FROM表1WHERE编号=INPUT;这里的INPUT是一个NUMBER,'编号'不是唯一的所... 正常的情况下
SELECT 信息1 BULK COLLECT INTO OUTPUT1 FROM 表1 WHERE 编号= INPUT;
这里的 INPUT 是一个 NUMBER , '编号' 不是唯一的 所以会返回多个行,'OUTPUT1 '也是一个ARRAY 所以一切正常。
但是 我现在为了改进效率把 用一个ARRAY作为INPUT输入,所以希望也用一个 bulk collection ,
那么直观的说 返回值 信息1 应该是一个ARRAY OF ARRAY这样的结构,那么这个select语句该怎么写呢,
首先我想到的是用for.. in 语句但是比起bulk collect into 效率提高没那么明显,所以请教高手解答,怎么使用bulk collection
来高效的解决此问题。
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
若以下回答无法解决问题,邀请你更新回答
揭高歌TH
2015-03-26 · 超过10用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:24.3万
展开全部
既然都用了BULK COLLECT INTO 了,就用forall而不是for。
cur sys_refcursor;
begin
open cur for select 信息1 from 表1 WHERE 编号= INPUT;
loop
fecth cur BULK COLLECT INTO OUTPUT1 limit 5000
forall i in 1 .. OUTPUT1.count
execute immediate ' 自定义sql语句 ' using OUTPUT1(i);
exit when OUTPUT1.count<5000;
end loop;
close cur;
end;

采用游标方式,将5000条记录一次性放入数组,forall批量提交,使用绑定变量可以减少硬解析而提高性能。
以上是使用方法和思路,具体细节兄台自己调试。
追问
谢谢 还有个小问题 就是 假设我本来是
SELECT 信息1 ,信息2 BULK COLLECT INTO OUTPUT1 OUTPUT2 FROM 表1 WHERE 编号= INPUT;
这样的语句 怎么用游标返回呢 ?难道要两个select?
追答
游标是指向一行记录而不是某个数据。OUTPUT1不是一个数组吗?数组属于record类型,即记录,可以这样:
open cur for select 信息1,信息2 from 表1 WHERE 编号= INPUT;
fecth cur BULK COLLECT INTO OUTPUT1 limit 5000;
...
这样做的前提是数组OUTPUT1能装得下(信息1,信息2)这组记录,即必须要在declare那里定义好数组。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式