
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
来高效的解决此问题。 展开
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(财富值+成长值)
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
既然都用了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批量提交,使用绑定变量可以减少硬解析而提高性能。
以上是使用方法和思路,具体细节兄台自己调试。
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那里定义好数组。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询