INTRODUCTION介绍
之前发表了一个研究心得(当然是站在别人的肩膀上的),在Oracle中直接用PL/SQL解析并读取Excel的内容。很多人都感兴趣,按照我的写法也可以成功实现了。
不过,有很多朋友提出了另外一个要求:读取Excel是可以了,那是否可以在Oracle数据库端直接生成Excel文件?二进制的文件。
开始我对这个问题是不怎么在意的。因为,在Oracle数据库中完全可以直接生成逗号或者Tab制表符的分隔符的文本(例如csv),然后用Excel打开,那是可以完全达到目的(之前我一直就是这样子做,特别是导数据给User的时候)。----
后来,由于这边老总要接收Excel数据的邮件,然后又必须要求用手机也可以正常查看数据,所以也只好研究这个产生Excel二进制文件的功能了。
实际上,这个办法也挺好,开发也简单。只不过,文本的文件相对于二进制的文件,有其优点,也有其缺点。请容我按照我的理解慢慢分析。
2.1 文本文件的优点
主要的优点,当然是开发简单,只需要将SQL的数据用游标获取,然后用逗号或者tab符号作为列分隔符,再用UTL_FILE将输出结果到服务器,产生文本文件即可。
怎么开发的我就不多说了,随便百度一下,资料都一大堆。
2.2 文本文件的缺点
文件文件的缺点,对应的就是Excel二进制文件的优点。
1)文本文件用Excel打开带来的问题
虽然它开发简单,但是由于数据是用逗号分隔符或者Tab制表符作为栏位的列分隔原则,导致了其数据解析的时候,非常容易出错!假设数据里面本来就有Tab符号,那么如果用Excel打开的时候,数据都乱了(因为多了一列)。如果是产生Excel文件,就肯定不会有这个额外的问题!
由于文本自动转换到Excel的特性导致,某些栏位,Excel会自作聪明地进行类型的转换!不信,你将4-1作为一个文本内容,然后用Excel打开看看?肯定自动变为日期类型2015/4/1了。
2)产生的文件容量的问题
通过测试得知,当输出的内容越多,用文本存储所占的容量就越大。而用Excel输出的文件就越小(相对于文本来说)。这说明,二进制的文件,应该是对数据有一些压缩的算法,所以其处理起来更加有效率。(附上实际的测试:162605行数据,文本:98MB,Excel:32.38MB)。
3)用户的操作体验
更加方便用户操作。如果是产生一个excel文件,当用户打开文件的时候,不会有那个烦人的自动转换内容的提示;另外