最近使用SQL*Plus命令生成html檔案,遇到一些有意思的知識點,順便記錄一下,方便以後需要的時候而這些知識點又忘記而捉急。好記性不如爛筆頭嗎!
為什麼要用SQL*Plus生成html檔案?
有些人肯定會問,我使用SQL*Plus為什麼要生成html檔案呢? SQL*Plus本身就是一個命令工具,生成html檔案有必要嗎? 下面是個人的一些看法,如有不對,敬請指正:
有很大一部分ORACLE DBA都習慣使用SQL*Plus管理、維護資料庫,而且命令玩得相當熟、相當溜, SQL*Plus佔用資源少,速度快,即使在如今UI工具(Toad、PL/SQL Developer..)大行其道的年代, 還是有很多DBA或SQL*Plus愛好者廣泛使用SQL*Plus, 不過SQL*Plus確實也有很多不足的地方,例如格式設定複雜,如果不設定格式,輸出又相當不友好,另外,命令介面是需要刷屏的,有時候你需要往前翻滾,檢視前面輸出內容;有時候,你需要將那些輸出儲存起來,方便你事後分析、查閱; 有時候你需要儲存你那些查詢的SQL。這時候SQL*Plus就暴露弊端了,當然,你會說我可以使用spool儲存為文字,這個當然可以,但是文字格式的檔案在很多方面沒有html檔案方便......
如何使用SQL*Plus生成html檔案?
其實SQL*Plus生成html檔案很簡單,主要是使用 set markup html on(指定是否生成HTML格式,ON生成,OFF不生成,預設是OFF) 和spool命令,如下所示
set markup html on;
spool salgrade.html
select * from scott.salgrade; --需要查詢的SQL指令碼
spool off
set markup html off
exit
如何使用SQL*Plus生成漂亮的html檔案?
其實上面案例生成的html檔案是很醜陋的,如果要生成漂亮的html檔案,則必須對輸出的html格式進行設定。
MARK[UP] HTML [OFF|ON]
[HEAD text] [BODY text] [TABLE text]
[ENTMAP {ON|OFF}]
[SPOOL {OFF|ON}]
[PRE[FORMAT] {OFF|ON}]
如上所示,可以設定HEAD、BODY 、TABLE的格式,
[HEAD text]
設定html檔案的head格式
[BODY text]
設定html檔案的body格式
[TABLE text]
設定html檔案的table格式
[ENTMAP {ON|OFF}]
指定在SQL * Plus中是否用HTML字元實體如<, >, " and &等替換特殊字元<, >, " and & 。預設設定是ON
其實要生成漂亮的html檔案,還是在於html的css設定、調整,這個是個複雜、細緻活。當然網上有一些好看的css設定模板,你可以參考、借鑑、甚至直接拿過來使用。
SET MARKUP HTML ON ENTMAP OFF;
SET MARKUP HTML ON SPOOL ON -
HEAD '<title>My Html Report Test</title> -
<style type="text/css"> -
table {border:1px solid #9ec9ec; width:60%;border-width:1px 0px 0px 1px;text-align:center;font-size:12px} -
td {border:solid #9ec9ec; border-width:0px 1px 1px 0px; padding:4px 0px;}-
</style>'
SPOOL htmltest.html
SELECT * FROM SCOTT.SALGRADE;
SPOOL OFF;
SET MARKUP HTML OFF;
一些生成漂亮html檔案的模板。
SET MARKUP HTML ON SPOOL ON -
HEAD '<title>My Report</title> -
<style type="text/css"> -
table {-
font-family: arial, sans-serif;-
font-size: 11px;-
color: #333333;-
border-width: 1px;-
border-color: #3A3A3A;-
border-collapse: collapse;-
}-
th {-
border-width: 1px;-
padding: 8px;-
border-style: solid;-
border-color: #517994;-
background-color: #B2CFD8;-
}-
tr:hover td {-
background-color: #DFEBF1;-
}-
td {-
border-width: 1px;-
padding: 8px;-
border-style: solid;-
border-color: #517994;-
background-color: #ffffff;-
}-
</style>'
spool htmltest.html
select * from scott.salgrade;
spool off;
set markup html off;
SET MARKUP HTML ON SPOOL ON -
HEAD '<title>My Report</title> -
<style type="text/css"> -
table{-
font-family: verdana, arial, sans-serif;-
font-size: 11px;-
color: #333333;-
border-width: 1px;-
border-color: #3A3A3A;-
border-collapse: collapse;-
}-
th {-
border-width: 1px;-
padding: 8px;-
border-style: solid;-
border-color: #FFA6A6;-
background-color: #D56A6A;-
color: #ffffff;-
}-
tr:hover td {-
cursor: pointer;-
background-color: #F7CFCF;-
}-
td {-
border-width: 1px;-
padding: 8px;-
border-style: solid;-
border-color: #FFA6A6;-
background-color: #ffffff;-
}-
</style>'
spool htmltest.html
select * from scott.salgrade;
spool off;
set markup html off;
參考資料:
https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch7.htm
https://blog.mafr.de/2006/12/27/creating-html-reports-with-sqlplus-2/