最近有个需求,从Oracle导出数据到Excel。

针对这个需求,有多种实现方式,例如spool、utl_file、PLSQL Developer导出、Java等语言直连数据库操作,没有最佳方案,只有最合适的。

(1)spool

spool是Oracle提供的命令行数据导出工具。它可以将select数据库的内容写到文件中,同时可以设置一些格式,控制输出的结构,只需要select前执行"spool 文件路径和名称",即可将select的内容,输出到这个文件。

基本格式如下,

SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]

例如,

spool test.txt(test.csv)
select ...
spool off

可以控制输出文件的格式,通常在脚本中调用这个指令,和业务逻辑结合。如果说它的弊端,调整输出格式,算是其中之一,例如输出文件中是否删除表头,是否删除SQL语句,每个字段的宽度,这些可能都需要提前设置。

可参考《spool导出格式的问题》。

sqlplus中常用的一些设置格式的指令,

set echo off            --关闭脚本中正在执行的SQL语句的显示
set feedback off        --关闭本次sql命令处理的记录条数,默认为on即去掉最后的已经选择的行数
set verify off          --可以关闭和打开提示确认信息
set heading off         --关闭标题的输出设置为off就去掉了select结果的字段名,只显示数据
set term off            --不在屏幕上输出执行结果
SET newpage none        --页与页之间没有分隔
set trimspool on        --将每行后面多余的空格去掉【linesize-实际字符数=多余空格】
set trimout on          --去除标准输出每行后面多余的空格
set linesize 200        --设置每行最多显示200个字符
set pagesize 0          --设置每页最多显示999行记录
set termout off         --屏幕不显示查询数据

(2)utl_file

Oracle还提供了utl_file,用于读写操作系统文件,具体操作可参考《Oracle数据导出新选择》,最大的优势,就是它的效率高,毕竟是内部执行,测过200万数据导出,大约用时16秒,还支持文件切分,算是一种高级的数据导出工具。可以在存储过程中调用utl_file,还可以通过程序进行调用,功能很强大,但是得了解它的用法,具体可参考《PL/SQL Packages and Types Reference》这个官方文档。

(3)PLSQL Developer

PLSQL Developer导出,可能是最简单的,因为都是图形化的操作,即使不是很熟悉数据库,都可以快速掌握。

但是凡事都是两面的,简单易懂,自然有它的弊端,单就软件来说,封装了很多操作,例如常用的F5,查看执行计划,它执行的是explain,了解Oracle的朋友可能知道这种方式得到的执行计划可能不是真实的(具体可参考《一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法》),因此,可能会对问题的判断产生影响。

和PLSQL Developer一些问题相关的历史文章,

《能不能算是PLSQL Developer的锅?》

《PLSQL Developer中控制结果集表格自动提交》

《PLSQL Developer几个可能的隐患》

《PLSQL Developer中文乱码问题》

《PLSQL Developer免密登录》

《PLSQL Developer日期格式如何定制化》

通过PLSQL Developer是可以直接导出Excel格式的文件,但是适合于数据量较小的场景,数据量太大,容易卡顿,而且自定义的可控性不强,毕竟都是软件提供现成的功能。

(4)Java等语言

通过Java、C、Python这些编程语言可以直连数据库,进行数据的导出,最大的优势,就是自主性很强,任何格式、任何逻辑,都可以通过程序来实现。但相对来说,对使用者就会提出更高的要求,尽管像连接数据库的操作、检索数据的操作、导出Excel的操作,相对比较通用,但是还得需要一些学习成本,如果是和业务逻辑绑定的,通过程序实现Excel的导出,还是比较方便的。

因此,采用何种数据导出的操作,还是取决于具体的需求,结合导出数据量,选择最合适方案。选择的过程, 其实就是设计的过程,和写程序一样,设计好了,事半功倍,"磨刀不误砍柴工"。

参考资料,

http://blog.itpub.net/28602568/viewspace-2120711/

https://www.cnblogs.com/xzjf/p/8550449.html

https://www.cnblogs.com/maowenjie/p/12851535.html

https://blog.csdn.net/lixiaomei0623/article/details/121274473

https://blog.csdn.net/baoqiangwang/article/details/121134329

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

近期更新的文章:

《Oracle强制创建视图的操作》

《最近碰到的一些问题》

《这次的"室温超导"爆炸性发现,会是人类的进步?》

《国务院机构改革方案的学习》

《MySQL日志 - Redo Log重做日志》

近期的热文:

《推荐一篇Oracle RAC Cache Fusion的经典论文》

《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:

《公众号1100篇文章分类和索引》

Oracle导出Excel的几种操作方案的比较相关推荐

  1. (转).NET导出Excel的四种方法及评测

    .NET导出Excel的四种方法及评测 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspo ...

  2. Oracle导出excel

    oracle导出excel(非csv)的方法有两种,1.使用sqlplus  spool,2.使用包体 现将网上相关代码整理后贴出以备不时之需: 使用sqlplus: 使用sqlplus需要两个文件: ...

  3. .net 导出excel_C# 导出 Excel 的 6 种简单方法!你会几种?

    [CSDN 编者按]C# 导出 Excel 的6种简单方法:数据表导出到 Excel,对象集合导出到 Excel,数据库导出到 Excel,微软网格控件导出到 Excel,数组导出到 Excel,CS ...

  4. html表格导出excel有几种方式

    html表格导出excel有几种方式 一. 前后端结合 利用 JavaScript 将表格内容转换为 Excel 文件格式,然后通过 Ajax 请求将文件数据发送给后台,再由后台返回该文件数据流,前端 ...

  5. oracle 导出导入exl,关于oracle导出excel和excel导入oracle的经验总结【转】

    一.oracle导出excel 方法一:最简单的方法---用工具plsql dev 执行File =>new Report Window .在sql标签中写入需要的sql,点击执行或按快捷键F8 ...

  6. oracle导出excel和excel导入oracle

    一.oracle导出excel 方法一:最简单的方法---用工具plsql dev 执行File =>new Report Window .在sql标签中写入需要的sql,点击执行或按快捷键F8 ...

  7. 关于oracle导出excel和excel导入oracle的经验总结

    http://blog.csdn.net/xieyunchao/article/details/5218974 一.oracle导出excel 方法一:最简单的方法---用工具plsql dev 执行 ...

  8. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

  9. .net npoi xssfclientanchor设置图片缩放大小_.NET导出Excel的四种方法及评测

    前言 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspose.Cells四个市面上常见的库 ...

最新文章

  1. P3201 [HNOI2009]梦幻布丁 [启发式合并][set]
  2. python内置函数用来返回数值型序列中所有元素之和_语句x = 3==3, 5执行结束后,变量x的值为_学小易找答案...
  3. 39. 组合总和020(思路+详解)
  4. elinks文字浏览器
  5. redis入门——服务器篇
  6. cesium3dtiles位置改变
  7. html5圆形提交按钮样式,HTML5 SVG带圆形进度条动画的提交按钮特效
  8. 通过shell登录OSC并备份博文
  9. a4如何打印双面小册子_a4如何打印双面小册子
  10. 有人喜欢有人嫉妒,竟然因为这上了互联网热搜
  11. 计算机论文档案初探,[电子档案管理论文:档案计算机管理技术人才培训工作初探.doc...
  12. 世界著名黑客的安全建议
  13. 如何证明Coq标准库中filter引理
  14. PMP项目管理是什么?
  15. 如何删除tmp计算机桌面,win10系统下tmp临时文件删除不了如何解决
  16. hp 800 g4 twr linux,【拆机】HP EliteDesk 800 G4 TWR—探究塔式机箱的秘密
  17. 零基础选择前端还是后端?
  18. Quartz的一般配置方法
  19. AttributeError: module 'torch.nn' has no attribute 'LocalResponseNorm'问题的解决办法
  20. 用Python写中文数字对照表

热门文章

  1. 关于C语言课设学生管理系统的编写(简单版)
  2. DHCP Lease Time - 动态 IP 使用时限
  3. AD出现Microsoft Excel is not found on your computer...如何解决
  4. Ubuntu应用---搜狗拼音输入法
  5. 使用VSTS的Git进行版本控制(六)——拉取请求
  6. 微信H5游戏开发需要注意什么?
  7. 技巧篇:scanf触发malloc_consolidate进行unlink(chunk size限制得到极小的chunk)
  8. FFmpeg+VS2013开发环境配置
  9. winform按钮切换页面_C#如何通过一个按钮实现窗体界面的中英文切换?
  10. 数据库工单系统的初步设计