java操作oracle如何处理很大很大的查询结果集

select*formtablehas100000000records这个查询一旦执行,内存就溢出了,然后报错,应该怎么操作呢,oracle有没有查询结果集放在硬盘上的,... select * form tablehas100000000records
这个查询一旦执行,内存就溢出了,然后报错,应该怎么操作呢,oracle有没有查询结果集放在硬盘上的,然后按行遍历,有这种方式吗,如果没有,应该怎么办呢
展开
 我来答
逝水无情full
2014-10-13 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:49.2万
展开全部
用oracle分页吧!然后用一个count做统计总数,查询结果一般都是在内存中,要是在硬盘上的话要写上去,用完了还要擦除,基本不可能这样做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小白瓜大侠
推荐于2016-05-17
知道答主
回答量:15
采纳率:0%
帮助的人:14.5万
展开全部
设置个查询起始条数和结束条数吧。
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作为一列给拿出来了,所以在外层查询中它已经不会改变了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wh猎人
2014-10-13 · TA获得超过1125个赞
知道大有可为答主
回答量:1157
采纳率:89%
帮助的人:665万
展开全部
查询的时候不能这样查,sql应该这样写:
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结果为空,什么都查不到啊,你找张表试试,还是我的库有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小锄头andrew
2014-10-13 · TA获得超过627个赞
小锄头andrew
采纳数:224 获赞数:627

向TA提问 私信TA
展开全部
你每次都要全部查处数据吗?能不能分页查询?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式