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

如果我查询出来了非常大量的数据,那这个游标会不会停留在open那里很久,也就是说会很久之后才进入第一个loop里面,有哪位高手能指点一下吗?

使用子查询执行直接装载
insert /*+APPEND */ into employee(empno,ename,sal,deptno)
select empno,ename,sal,deptno from emp where deptno=20;

注意,要加上“/*+APPEND */",它表示直接装载方式,当装载大批量数据时,这是种做法效率很高。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-02
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,就不要使用游标处理了。

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网