plsql中如果我定义一个游标,然后打开这个游标,然后loop循环把查询出来的数据全部插入自己定义的表中

如果我查询出来了非常大量的数据,那这个游标会不会停留在open那里很久,也就是说会很久之后才进入第一个loop里面,有哪位高手能指点一下吗?... 如果我查询出来了非常大量的数据,那这个游标会不会停留在open那里很久,也就是说会很久之后才进入第一个loop里面,有哪位高手能指点一下吗? 展开
 我来答
态众幺7696
2012-03-02 · 超过12用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:40.1万
展开全部
使用子查询执行直接装载
insert /*+APPEND */ into employee(empno,ename,sal,deptno)
select empno,ename,sal,deptno from emp where deptno=20;

注意,要加上“/*+APPEND */",它表示直接装载方式,当装载大批量数据时,这是种做法效率很高。
西门公子庆
2012-03-02 · TA获得超过1879个赞
知道小有建树答主
回答量:482
采纳率:100%
帮助的人:262万
展开全部
open那不会浪费太多时间。需要的时间就是两部分。
1.定义游标,获取结果集的时候。---这个时间主要看你的sql查询需要多长时间。
2.Loop的时候。----这个就是运行的时间了。

不过建议大量数据的话不要用游标来处理。
游标的处理速度是很慢的。效率比较低。最好能做批量处理。

我以前用游标做过数据处理,我那个业务逻辑比较复杂,每小时大概只能处理几十万数据。效率太低了。后来我都改成多步骤,用insert into select 。。from 这类的写法去处理,能差百八十倍的速度。
追问
批量处理是指定义plsql记录表进行批量处理吗?
insert into select 。。from这类写法是不是能减少sql查询时间呢?
我的主要耗时是在sql查询里面,我用的是动态sql(没办法),而且里面有几个子查询,还有分组,求和,什么的,花了很多时间,所以这个查询方面不知道有什么方法能减少一些时间,感觉半天才进loop里面
追答
insert into 。。。select * from 这种写法,比游标的逐条处理要快百八十倍。。数据量越大,效率差距越大。 
嗯。你意思半天才进loop意思就是获取游标里面数据的时候检索消耗的时间太长呗。这个只能根据你实际的情况去进行SQL优化了。比如说建相关索引什么的,这块就和游标本身无关了。

你游标里存放的数据量大概有多大?反正我建议如果超过1000,就不要使用游标处理了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式