利用SQL*PLUS导出成EXCEL和html的功能实现报表统计:
也就是生成HTML格式,但是同样的格式输出到EXCEL中也能正常显示。
关键就是这些参数的设定
set markup html on entmap ON spool on preformat off
参数注解如下:
========================================================================
TABLE text
设置
标签的属性,如BORDER, CELLPADDING, CELLSPACING和WIDTH。
默认情况下, 的WIDTH属性设置为90%,BORDER属性设置为1。
ENTMAP {ON|OFF}
指定在SQL * Plus中是否用HTML字符实体如<, >, " and &等替换特殊字符<, >, " and & 。默认设置是ON。
SPOOL {ON|OFF}
指定是否在SQL*Plus生成HTML标签 和,
和。默认是OFF。
注:这是一个后台打印操作,只有在生成SPOOL文件生效,在屏幕上并不生效。
PRE[FORMAT] {ON|OFF}
指定SQL*Plus生成HTML时输出
标签还是HTML表格,默认是OFF,因此默认输出是写HTML表格。
=========================================================================
通过SQL*PLUS我们可以构建友好的输出,满足多样化用户需求。
本例通过简单示例,介绍通过sql*plus输出xls,html两种格式文件.
首先创建两个脚本:
1.get_d_stat.sh 用以设置环境,主要调用具体脚本
2.get_d_stat.sql 为获取具体数据之脚本
创建实验表t_grade如下:
- create table t_grade(id int,name varchar2(10),subject varchar2(20),grade number);
- insert into t_grade values(1,'ZORRO','语文',70);
- insert into t_grade values(2,'ZORRO','数学',80);
- insert into t_grade values(3,'ZORRO','英语',75);
- insert into t_grade values(4,'SEKER','语文',65);
- insert into t_grade values(5,'SEKER','数学',75);
- insert into t_grade values(6,'SEKER','英语',60);
- insert into t_grade values(7,'BLUES','语文',60);
- insert into t_grade values(8,'BLUES','数学',90);
- insert into t_grade values(9,'PG','数学',80);
- insert into t_grade values(10,'PG','英语',90);
- insert into t_grade values(11,'TOM','化学',90);
- commit;
脚本get_d_stat.sh内容如下:
- sqlplus -s dba_user/dbapasswd<<EOF
- set linesize 200
- set term off verify off feedback off pagesize 999
- set markup html on entmap ON spool on preformat off
- spool /apps/dba_tool/get_data/get_d_stat_`date --date "1 days ago" +%F`.xls
- --spool get_d_stat_`date +%F`.xls
- --spool tables.html
- @/apps/dba_tool/get_data/get_d_stat.sql;
- spool off
- exit;
- EOF
脚本get_d_stat.sql 内容如下:
- select name,sum(case when SUBJECT='语文' then GRADE else 0 end) "语文",sum(case when SUBJECT='数学' then GRADE else 0 end) "数学",
- sum(case when SUBJECT='英语' then GRADE else 0 end) "英语" ,sum(case when SUBJECT='化学' then GRADE else 0 end) "化学" from t_grade group by name;
运行脚本get_d_stat.sh后,会在/apps/dba_tool/get_data/目录下生成get_d_stat_2012-06-18.xls的报表文件。效果图如下:
NAME |
语文 |
数学 |
英语 |
化学 |
SEKER |
65 |
75 |
60 |
0 |
BLUES |
60 |
90 |
0 |
0 |
TOM |
0 |
0 |
0 |
90 |
PG |
0 |
80 |
90 |
0 |
ZORRO |
70 |
80 |
75 |
0 |
到此为止,利用SQL*PLUS导出成EXCEL和html的功能实现报表统计已经成功。
阅读(8350) | 评论(4) | 转发(4) |
给主人留下些什么吧!~~
haliaetos2015-11-05 09:11:15
您好,请教一下导出来21万条数据90M为什么打开超慢啊,正常情况下我的电脑一下子就该打开了
history_xcy2015-01-31 15:43:44
写的很好,请教个问题,怎么输出csv格式的呢,xls格式占用空间较大,3千万数据导出以后就到达10G了, 我想通过这个方式导出千万级别的表。PLSQL工具太卡了不行。
硅谷的码农2015-01-22 14:18:25
帆软报表也可以实现这样的功能
rzxtest0022012-06-19 19:47:29
写的很好,希望写出更多好文章。