Oracle使用SQL*Plus生成html檔案

lhrbest發表於2017-12-31

Oracle使用SQL*Plus生成html檔案






SQL*Plus生成html檔案

2016-12-27 12:12 by 瀟湘隱者, 556 閱讀, 9 評論, 收藏編輯

最近使用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字元實體如&lt;, &gt;, &quot; and &amp;等替換特殊字元<, >, " 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;

clip_image001

 

一些生成漂亮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;

clip_image002

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;

clip_image003

 

參考資料:

https://blog.mafr.de/2006/12/27/creating-html-reports-with-sqlplus-2/







簡單:

set feedback off

set markup html on;

spool e:\data\salgrade.html

select * from scott.emp;

spool off

set markup html off

exit

   
   結果:

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800   20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975   20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850   30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450   10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000   20
7839 KING PRESIDENT   1981-11-17 00:00:00 5000   10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100   20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950   30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000   20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300   10



漂亮的表格:

set feedback off

set markup html on;

set markup html on spool on preformat off entmap on -

head ' -

  <title> SCOTT.EMP表的資料</title> -

  <style type="text/css"> -

    body              {font:11px Courier New,Helvetica,sans-serif; color:black; background:White;} -

    p                 {font:11px Courier New,Helvetica,sans-serif; color:black; background:White;} -

    table,tr,td       {font:11px Courier New,Helvetica,sans-serif; color:Black; background:#FFFFCC; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;} -

    th                {font:bold 11px Courier New,Helvetica,sans-serif; color:White; background:#0066cc; padding:0px 0px 0px 0px;} -

    h1                {font:bold 12pt Courier New,Helvetica,Geneva,sans-serif; color:White; background-color:White; border-bottom:1px solid #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} -

    h2                {font:bold 11pt Courier New,Helvetica,Geneva,sans-serif; color:White; background-color:White; margin-top:4pt; margin-bottom:0pt;} -

    a                 {font:11px Courier New,Helvetica,sans-serif; color:#663300; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -

    a.link            {font:11px Courier New,Helvetica,sans-serif; color:#663300; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -

    a.noLink          {font:11px Courier New,Helvetica,sans-serif; color:#663300; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -

    a.noLinkBlue      {font:11px Courier New,Helvetica,sans-serif; color:#0000ff; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -

    a.noLinkDarkBlue  {font:11px Courier New,Helvetica,sans-serif; color:#000099; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -

    a.noLinkRed       {font:11px Courier New,Helvetica,sans-serif; color:#ff0000; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -

    a.noLinkDarkRed   {font:11px Courier New,Helvetica,sans-serif; color:#990000; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} - 

    a.info:hover {background:#eee;color:#000000; position:relative;} -

    a.info span {display: none; } -

    a.info:hover span {font-size:11px!important; color:#000000; display:block;position:absolute;top:30px;left:40px;width:150px;border:1px solid #ff0000; background:#FFFF00; padding:1px 1px;text-align:left;word-wrap: break-word; white-space: pre-wrap; white-space: -moz-pre-wrap} -

  </style>' -

body   'BGCOLOR="#C0C0C0"'

 

 

SET MARKUP html TABLE  'WIDTH="100%" border="1" summary="Script output"  cellspacing="0px" style="border-collapse:collapse;" '

 

define data_path=E:\data

 

col ymd new_value v_ymd

 

select to_char(sysdate,'YYYYMMDDHH24MISS') ymd FROM dual;

 

spool &data_path\result_html_&&v_ymd..html

select * from scott.emp;

spool off

set markup html off

exit

    結果:


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800   20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975   20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850   30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450   10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000   20
7839 KING PRESIDENT   1981-11-17 00:00:00 5000   10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100   20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950   30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000   20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300   10






About Me

.............................................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

.............................................................................................................................................

● QQ群號:230161599(滿)、618766405

● 微信群:可加我微信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友646634621,註明新增緣由

● 於 2018-01-01 06:00 ~ 2018-01-31 24:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

.............................................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

好訊息:小麥苗OCP、OCM開班啦,詳情請點選http://blog.itpub.net/26736162/viewspace-2148098/

.............................................................................................................................................

使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。

   小麥苗的微信公眾號      小麥苗的DBA寶典QQ群2     《DBA筆試面寶典》讀者群       小麥苗的微店

.............................................................................................................................................

Oracle使用SQL*Plus生成html檔案
DBA筆試面試講解群
《DBA寶典》讀者群 歡迎與我聯絡



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2149543/,如需轉載,請註明出處,否則將追究法律責任。

相關文章