天天看點

sqlplus SPOOL 導出網頁檔案

在用spool 導出資料的時候,如果直接導成excel, 那麼在格式上比較路,比如一個字段占了2列,這個還是好的,有的占了辦列,這個格式看上去還是很麻煩的,是以我們可以使用sqlplus 的markup 指令, 直接導出成網頁形式的,這樣在格式上要整齊很多。

關于sqlplus 和 spool,可以參考我的2篇blog:

Oracle sqlplus 常用指令總結

文法:

SET MARK[UP] HTML [ON | OFF] [HEAD text] [BODY text] [TABLE text] [ENTMAP {ON | OFF}] [SPOOL {ON | OFF}] [PRE[FORMAT] {ON | OFF}]

SET MARKUP指明SQL*Plus輸出HTML編碼格式,必須使用SET MARKUP HTML ON SPOOL ON和SQL*Plus SPOOL指令去建立一個spool檔案,并且以HTML格式輸出。

SET MARKUP習慣稱作SQLPLUS -MARKUP指令。

使用SQLPLUS -MARKUP HTML ON或者SQLPLUS -MARKUP HTML ON SPOOL ON 産生标準的web頁,SQL*Plus 自動生成完整的用<HTML>和<BODY>标簽封裝HTML網頁。 當設定SPOOL OFF或者退出SQL*Plus是,spool檔案中的HTML标簽就閉合。

SQLPLUS -MARKUP和一些其他有用的靜默和限制指令一起用。

使用MARKUP HTML ON生成HTML輸出,無論是<PRE>标簽還是一個HTML表格。輸出一個表格使用标準的HTML  <TABLE>, <TR> 和 <TD> 标簽,自動閉合從一個查詢傳回結果集的行和列。當設定HTML ON時,預設産生标準HTML表格。通過設定PREFORMAT ON産生預格式化HTML <PRE> 标簽。

用SHOW MARKUP指令檢視MARKUP操作目前狀态:

SQL> show markup

markup HTML OFF HEAD "<style type='text/css'> body {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;}

HTML [ON|OFF]

指定是否生成HTML格式,ON生成,OFF不生成,預設是OFF。

HEAD text

指定HTML中HEAD标簽中的内容,預設情況下,文本包括級聯樣式和标題。

BODY text

指定HTML中BODY标簽屬性

TABLE text

設定<TABLE>标簽的屬性,如BORDER, CELLPADDING, CELLSPACING和WIDTH.。預設情況下,<TABLE> 的WIDTH屬性設定為90%,BORDER屬性設定為1。

ENTMAP {ON|OFF}

指定在SQL * Plus中是否用HTML字元實體如<, >, " and &等替換特殊字元<, >, " and & 。預設設定是ON。例如:

SQL> set markup html on entmap off

SQL> 

<br>

SQL> set markup html on entmap on

SPOOL {ON|OFF}

指定是否在SQL*Plus生成HTML标簽<HTML> 和<BODY>, </BODY> 和</HTML>。預設是OFF。

注:

這是一個背景列印操作,隻有在生成SPOOL檔案生效,在螢幕上并不生效。

PRE[FORMAT] {ON|OFF}

指定SQL*Plus生成HTML時輸出<PRE>标簽還是HTML表格,預設是OFF,是以預設輸出是寫HTML表格。

在生成HTML格式時要設定一些其他操作,列出如下:

SET ECHO {ON|OFF}

是否顯示腳本中正在執行的SQL語句。

SET FEED[BACK] {6|n|ON|OFF} 

.是否顯示目前sql語句查詢或修改的行數。預設隻有結果大于6行時才顯示結果的行數。如果set feedback 1 ,則不管查詢到多少行都傳回。當為off 時,一律不顯示查詢的行數。

SET HEA[DING] {ON|OFF} 

是否顯示列标題。當SET HEADING OFF時,在每頁的上面不顯示列标題,而是以空白行代替。

SET LIN[ESIZE] {80|n} 

設定一行可以容納的字元數。如果一行的輸出内容大于設定的一行可容納的字元數,則折行顯示。

SET NEWP[AGE] {1|n|NONE} 

設定頁與頁之間的分隔。

當SET NEWPAGE 0 時,會在每頁的開頭有一個小的黑方框。 

當SET NEWPAGE n 時,會在頁和頁之間隔着n個空行。 

當SET NEWPAGE NONE 時,會在頁和頁之間沒有任何間隔。 

SET NULL text 

顯示時,用text值代替NULL值 

SET PAGES[IZE] {24|n} 

設定一頁有多少行數,如果設為0,則所有的輸出内容為一頁并且不顯示列标題

SET WRA[P] {ON|OFF} 

當SQL語句的長度大于LINESIZE時,是否在顯示時截取SQL語句,設定SET WRAP ON時,輸出行的多于的字元會另起一行顯示,否則,會将輸出行的多于字元切除,不予顯示。 

SET TERM[OUT] {ON|OFF} 

是否在螢幕上顯示輸出的内容,  主要用與SPOOL結合使用。設定SET TERMOUT OFF,輸出的内容隻儲存在輸出檔案中,不會顯示在螢幕上,提高了SPOOL輸出速度。

SET TRIMS[OUT] {ON|OFF}  

将SPOOL輸出中每行後面多餘的空格去掉

示例:

##################################################################### 

## get000001Info.sh          ## 

## create by Tianlesoftware    ##

#!/bin/ksh 

EDITOR=vi; export EDITOR 

PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/openwin/bin:/opt/bin:.; 

export PATH 

cd /u03/scripts

sqlplus -s user/pwd@sid <<EOF 

set numwidth 20 

set heading off

Set pagesize 0

Set term off

Set feedback off

set linesize 99999

set trimspool off

set term off verify off feedback off pagesize 9999 

set markup html on entmap ON spool on preformat off

spool 000001info.xls

select  '資訊編号', '收派員','點部' ,'操作員','時間','催派運單号','類型','資訊内容' from dual

union all

SELECT t.infoid,t.empid,r.deptid,t.operator,to_char(t.sendtime,'yyyy-mm-dd hh24:mi:ss'), to_char

(t.billno),t.infotype,t.msg FROM otherinfo t,employee r WHERE   t.empid = r.empid AND t.sendtime >=    

 trunc  (( TRUNC ((SYSDATE - 1) , 'dd') + 15 / 48 ),'mi'

             )    

             and t.sendtime <   TRUNC ((SYSDATE ) , 'dd') AND t.operator = 000001;

spool off 

exit

EOF

#sendMail

uuencode 000001info.xls 000001info.xls|mailx -s "000001每日内部通訊,如有疑問請聯系IT" [email protected]

道森Oracle,國内最早、最大的網絡語音教育訓練機構,我們提供專業、優質的Oracle技術教育訓練和服務!

我們的官方網站:http://www.daosenoracle.com

官方淘寶店:http://daosenpx.taobao.com/