肥波先生的gravatar头像
肥波先生 2015-08-13 14:48:21

海量oracle数据如何批量导出为excel文件?

现在有25W条左右的数据需要导入到excel中,excel版本07,我使用pl sql,导出直接死掉,还是只7是万条数据。。。谁有好的办法解决呢?

所有回答列表(5)
yimao的gravatar头像
yimao  LV16 2015年8月16日

excel的一个sheet最多能够到出65535条数据,POI、JXL、FastExcel均为java第三方开源导出Excel的开源项目,POI、JXL、FastExcel比较  

导出方案一:一次性全部导出到一个Excel文件中。  
实际情况均报OutOfMemery错误,以下数据为报OutOfMemery数据时,数据到的最大数据数目,如表1所示:  
表1:报OutOfMemery错误时所能处理的数据量  
                                       FastExecl    POI      JXL  
10000数据/sheet             37465     28996   42270  
5000数据/sheet               39096     31487   46270  
3000数据/sheet                39000    32493   47860  
小结:  
多分sheet能一定程度上减少内存的使用,但是均因为程序中创建的Cell(即为Excel中的一个单元格)无法释放,消耗大量内存,导致OutOfMemery错误;JXL表现最好,创建Cell内存使用较少。  
 
导出方案二:先分多个Excel文件将数据全部导出,然后对多个Excel文件进行合并。  
首先,测试将全部数据导出所用的时间,如表2所示,数据均测试三次取平均。  
表2:导出全部数据所用时间  
                                 FastExecl    POI    JXL  
10000数据/文件             68s          33s   30s  
5000数据/文件               68s          32s   33s  
3000数据/文件               59s          33s   39s  
小结:  
均成功导出Excel文件,原因是导出一个Excel文件,释放所占用的创建Cell的内存。  
FastExecl表现最差,POI表现稳定,JXL随着数据的增大,速度一定程度上增快。  
 
然后,进行整合,由于将多Excel合并成一个Excel文件的功能只有POI所有,故使用POI测试,结果如表3所示。  
注:数据量大合并还会报OutOfMemery错误,故合并总数据量以5万为准。  
表3:合并5万数据所用时间  
时间  
10000数据/文件 11s  
5000数据/文件 11s  
3000数据/文件 11s  
小结:  
使用POI对文件进行合并速度较快,但有数据量的限制。  
 
 

评论(1) 最佳答案
hrose12的gravatar头像
hrose12  LV21 2015年8月13日

可以用java实现

touch39的gravatar头像
touch39  LV10 2015年8月13日

poi导入方法  楼主试过嘛?

Tonfay的gravatar头像
Tonfay  LV26 2015年8月13日

哥们,我有个不错的方法,使用mongodb ,mongodbVUE 工具 ,可以直接去 你的db中取出数据,并且 你的db中表结构直接复制到 mongodb中, 这时候你用java 实现对mongodb的读取,进行持久化到excel,速度会很快!70W 数据,读取估计也就是在5分钟左右.主要慢 ,是在对excel操作的时候.

这里你需要注意一点,别用java 直接去mongodb中 取出70W 的数据,你先取出1W ,再去1W01~2W的数据,一个For循环 执行70次即可!

希望采纳,高手勿喷!见听更好解决思路!

肥波先生的gravatar头像
肥波先生  LV12 2015年8月14日

。。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友