Oracle导出Excel的几种操作方案的比较

最近有个需求,从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

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/136469.html

联系我们
联系我们
分享本页
返回顶部