利用SQL*PLUS导出生成EXCEL和html的功能实现报表统计

楼主
我是社区第13859位番薯,欢迎点我头像关注我哦~
利用SQL*PLUS导出成EXCEL和html的功能实现报表统计:也就是生成HTML格式,但是同样的格式输出到EXCEL中也能正常显示。
关键就是这些参数的设定set markup html on entmap ON spool on preformat off参数注解如下:
========================================================================TABLE text设置<TABLE>标签的属性,如BORDER, CELLPADDING,CELLSPACING和WIDTH。
默认情况下,<TABLE> 的WIDTH属性设置为90%,BORDER属性设置为1。
ENTMAP{ON|OFF}
指定在SQL * Plus中是否用HTML字符实体如&lt;, &gt;, &quot; and &amp;等替换特殊字符<, >, " and & 。默认设置是ON。SPOOL{ON|OFF}
指定是否在SQL*Plus生成HTML标签<HTML>和<BODY>, </BODY> 和</HTML>。默认是OFF。注:这是一个后台打印操作,只有在生成SPOOL文件生效,在屏幕上并不生效。
PRE[FORMAT]{ON|OFF}
指定SQL*Plus生成HTML时输出<PRE>标签还是HTML表格,默认是OFF,因此默认输出是写HTML表格。
=========================================================================
通过SQL*PLUS我们可以构建友好的输出,满足多样化用户需求。
本例通过简单示例,介绍通过sql*plus输出xls,html两种格式文件。
首先创建三个脚本:
1.创建实验表t_grade,用以进行数据查询输出使用;
2.get_d_stat.sh 用以设置环境,主要调用具体脚本;
3.get_d_stat.sql 为获取具体数据之脚本;
1.创建实验表t_grade如下:
1. create table t_grade(id int,name varchar2(10),subject varchar2(20),grade number);
2. insert into t_grade values(1,'ZORRO','语文',70);
3. insert into t_grade values(2,'ZORRO','数学',80);
4. insert into t_grade values(3,'ZORRO','英语',75);
5. insert into t_grade values(4,'SEKER','语文',65);
6. insert into t_grade values(5,'SEKER','数学',75);
7. insert into t_grade values(6,'SEKER','英语',60);
8. insert into t_grade values(7,'BLUES','语文',60);
9. insert into t_grade values(8,'BLUES','数学',90);10.insert into t_grade values(9,'PG','数学',80);
11.insert into t_grade values(10,'PG','英语',90);
12.insert into t_grade values(11,'TOM','化学',90);
13.commit;
2.脚本get_d_stat.sh内容如下:
sqlplus -s dba_user/dbapasswd<<EOF1. set linesize 2002. set term off verify off feedback off pagesize 9993. set markup html on entmap ON spool on preformat off4. spool /apps/dba_tool/get_data/get_d_stat_`date --date "1days ago" +%F`.xls
o  --spool get_d_stat_`date +%F`.xls
§  --spool tables.html
§  @/apps/dba_tool/get_data/get_d_stat.sql;
§  spool off
§  exit;
§  EOF
3.脚本get_d_stat.sql 内容如下:
1. select name,sum(case when SUBJECT='语文' then GRADE else 0 end) "语文",sum(case when SUBJECT='数学' then GRADE else 0 end) "数学",
2. sum(case when SUBJECT='英语' then GRADE else 0 end) "英语" ,sum(case whenSUBJECT='化学' 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

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0回帖数 1关注人数 5780浏览人数
最后回复于:2012-10-17 14:30

返回顶部 返回列表