shell通過spool命令輸出數據(通過sql)到指定文件


spool的作用是什么?
spool的作用可以用一句話來描述:在sqlplus中用來保存或打印查詢結果。

1.對於SPOOL數據的SQL,最好要自己定義格式,以方便程序直接導入,比如以下SQL:
select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from test;

2.spool常用的設置 :
set colsep' ';    //域輸出分隔符
set echo off;     //顯示start啟動的腳本中的每個sql命令,缺省為on
set feedback off;   //回顯本次sql命令處理的記錄條數,缺省為on
set heading off;   //輸出域標題,缺省為on
set pagesize 0;   //輸出每頁行數,缺省為24,為了避免分頁,可設定為0。
set termout off;   //顯示腳本中的命令的執行結果,缺省為on
set trimout on;   //去除標准輸出每行的拖尾空格,缺省為off
set trimspool on;  //去除重定向(spool)輸出每行的拖尾空格,缺省為off

3.導出文本數據的建議格式:
set newpage none 設置頁與頁之間的分隔{1|n|none};當值為0時在每頁開頭有一個小的黑方框;當值為n時在頁和頁之間隔着n個空行;當為none時,會在頁和頁之間沒有任何間隔.
set heading off 是否顯示列標題,缺省為on.
set space 0 來設置各列間的空格數
set pagesize 0 頁行數
set trimout on 去除標准輸出每行的拖尾空格,缺省為off
set trimspool on 去除重定向(spool)輸出每行的拖尾空格,缺省為off
set linesize 2500 控制行的顯示寬度,缺省是80個字符。
注:LINESIZE要稍微設置大些,免得數據被截斷,它應和相應的TRIMSPOOL結合使用防止導出的文本有太多的尾部空格。但是如果LINESIZE設置太大,會大大降低導出的速度。
對於字段內包含很多回車換行符的應該給與過濾,形成比較規矩的文本文件。通常情況下,我們使用SPOOL方法,將數據庫中的表導出為文本文件的時候會采用以下方法,如下述:
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool 路徑+文件名
select col1||','||col2||','||col3||','||col4||'..' from tablename;
spool off

例子:將test表中的數據導出到文本

spool_test.sh腳本如下:

!/bin/sh

DB_USER=zxdbm_is
DB_PWD=zxin_sm
DB_SERV=zx10_40_43_133
sqlplus -s $DB_USER/$DB_PWD@$DB_SERV<
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool promt.txt
select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task;
spool off
EOF
exit

執行./spool_test.sh后生成sp_test.txt,內容如下:
83|115|1|20080307
85|115|11|20080307
86|115|10|20080307
84|115|2|20080307
6|5|14|20080307
7|5|12|20080307
9|5|15|20080307

記住在腳本文件中最后要加exit,否則輸出文件會包含sql語句。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM