使用sqlplus的spool功能格式化输出查询统计报表
在日常工作中,使用oracle数据库的DBA应该都会碰见这样的需求:
公司相关部门,定期需要技术人员出具相关业务的数据统计,其实如果这种统计是很频繁或者说查询数据量比较大,耗时较长,我们可以让开发写程序,做成定期自动生成一个excel的统计报表,作为DBA也有自己实现此功能的方法。
据本人所知,将查询统计的数据直接保存成excel格式的方法主要有:
1,使用pl/sql工具查询,然后将结果粘贴复制到excel;或者点击导出成csv格式,但是如果数据库字符集不是GBK格式的话,中文可能会乱码(如果查询时间不算太长)
2,使用excel的新建ODBC数据源连接直接导入到excel(仅限查询数据量不算太大,查询时间不算太长)
3,使用oracle自带的utl_file包来编写存储过程进行生成统计excel
4,就是咱们这次要详细讲解的sqlplus 的spool功能
1)编写一个linux下运行的shell脚本connect.sh
#!/bin/bash
#TIME=`date +%Y%m%d -d "3 days ago"`
TIME=`date +%Y%m -d "1 month ago"`
source ~/.bash_profile
sqlplus user/passwd < /dev/null
set linesize 2000
set term off verify off feedback off pagesize 9999
set markup html on entmap ON spool on preformat off
spool /var/local/bssg-reports/proxy-ticket-details/individual/reports/individual$TIME-10$TIME-12.html
@/var/local/bssg-reports/proxy-ticket-details/individual/get-data10-12.sql
spool off
exit
!
说明:使用set markup html on用于输出为HTML格式(HTML格式不会乱码),其实后面的spool出来的文件名称的后缀名可以直接写成.xls,spool出来的HTML文件可以直接用excel打开。
2)将查询的语句另存为一个sql文本get-date10-12.sql
select ****** from table_name
注意,sql文本中不能有空行,否则无法在linux上执行。
3)然后将connect.sh脚本放在oracle用户下的crontab里面定期执行即可,以后就不用每次手动跑sql了,到时间直接上服务器拿取文件就行,甚至可以结合linux的mailx直接将文件邮件发送给需要的部门工作人员(或者使用vsftp让客户自己去下载)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23502881/viewspace-765979/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23502881/viewspace-765979/