java操作oracle如何处理很大很大的查询结果集
select*formtablehas100000000records这个查询一旦执行,内存就溢出了,然后报错,应该怎么操作呢,oracle有没有查询结果集放在硬盘上的,...
select * form tablehas100000000records
这个查询一旦执行,内存就溢出了,然后报错,应该怎么操作呢,oracle有没有查询结果集放在硬盘上的,然后按行遍历,有这种方式吗,如果没有,应该怎么办呢 展开
这个查询一旦执行,内存就溢出了,然后报错,应该怎么操作呢,oracle有没有查询结果集放在硬盘上的,然后按行遍历,有这种方式吗,如果没有,应该怎么办呢 展开
4个回答
展开全部
用oracle分页吧!然后用一个count做统计总数,查询结果一般都是在内存中,要是在硬盘上的话要写上去,用完了还要擦除,基本不可能这样做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设置个查询起始条数和结束条数吧。
select * from (select t.*,rownum from table t where rownum < end) where rownum > start
其中start和end是其查询条数的起始值。
select * from (select t.*,rownum from table t where rownum < end) where rownum > start
其中start和end是其查询条数的起始值。
追问
为什么要像你这样才行,而select * from tablehas100000000records where rownum=10
这样就不行,你能告诉我这是怎么回事吗
追答
oracle里面的特色,rownum是个伪列, 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。譬如查询出了结果1到100,按你的方法,1的rownum小于10,这行就被删掉,那么第二行的rownum马上就变成1了。这样下去,所有的纪录早晚一个个被删光。
而按照我的方法,在子查询中将rownum作为一列给拿出来了,所以在外层查询中它已经不会改变了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
查询的时候不能这样查,sql应该这样写:
long idx=0,once=1000;
while(idx<10000000){
String sql="select ......
where rownum <= (idx+once) and rownum >= idx";
end+=once;
}
long idx=0,once=1000;
while(idx<10000000){
String sql="select ......
where rownum <= (idx+once) and rownum >= idx";
end+=once;
}
追问
select * from tablehas100000000records where rownum=10
j结果为空,什么都查不到啊,你找张表试试,还是我的库有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你每次都要全部查处数据吗?能不能分页查询?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |