天天看點

利用SQL*PLUS導出成EXCEL和html的功能實作報表統計:

利用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字元實體如<, >, " and &等替換特殊字元<, >, " 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,如需轉載請自行聯系原作者