利用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如下:
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;
2.腳本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
3.腳本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
BLUES
90
TOM
PG
80
ZORRO
70
到此為止,利用SQL*PLUS導出成EXCEL和html的功能實作報表統計已經成功。
本文轉自vcdog 51CTO部落格,原文連結:http://blog.51cto.com/255361/902439,如需轉載請自行聯系原作者