【實驗】使用SQL*Plus中set命令格式化SPOOL匯出的檔案

secooler發表於2009-09-05
在使用SQL*Plus生成報告檔案的時候,往往會因為其預設的設定導致輸出的結果非常的沒有可讀性,下面介紹一個日常中會被用到的一個指令碼,其中包含一些格式化輸出的set命令,為了方便理解,我會在每一條set命令之後緊跟著一個簡單的解釋,請慢慢體會。

sqlplus -s user_name/user_password << EOF >/dev/null
set echo off;      -- 不顯示指令碼中的每個sql命令(預設為on)
set feedback off;  -- 禁止回顯sql命令處理的記錄條數(預設為on)
set heading off;   -- 禁止輸出標題(預設為on)
set pagesize 0;    -- 禁止分頁輸出
set linesize 1000; -- 設定每行的字元輸出個數為1000,放置換行(預設為80 )
set numwidth 16;   -- 設定number型別欄位長度為16(預設為10)
set termout off;   -- 禁止顯示指令碼中命令的執行結果(預設為on)
set trimout on;    -- 去除標準輸出每行的行尾空格(預設為off)
set trimspool on;  -- 去除spool輸出結果中每行的結尾空格(預設為off)
spool sql_output_file.txt;
... ...
這裡輸入待執行的SQL命令,SQL命令整個執行過程都會被記錄在sql_output_file.txt檔案中。
... ...
spool off;
exit;
EOF

經過上面的處理之後,spool出來的資料基本上沒有多餘的干擾資料了。


沒有演示結果的技巧是無用的,也是枯燥的,所以,下面我來演示一下這個指令碼的使用過程。
我們以輸出all_objects檢視的所有內容為例,進行演示。

ora10g@Tdb /home/oracle$ sqlplus -s sec/sec << EOF >/dev/null
set linesize 1000;
> set echo off;
set termout off;
> set feedback off;
> set heading off;
> set pagesize 0;
> set linesize 1000;
> set numwidth 16;
> set termout off;
> set trimout on;
> set trimspool on;
> spool sql_output_file.txt;
> select * from all_objects;
> spool off;
> exit;
> EOF

這裡等待幾秒鐘的時間,檢視結果檔案sql_output_file.txt,就可以得到all_objects檢視內的所有內容了,這個檔案的格式是經過我們精心格式化之後的。
具體的匯出檔案sql_output_file.txt內容很長,不便於貼到這裡。

可以使用cat命令檢視輸出檔案的內容
ora10g@Tdb /home/oracle$ cat sql_output_file.txt

-- The End --

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

相關文章