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

spool的做用是什麼? spool的做用能夠用一句話來描述:在sqlplus中用來保存或打印查詢結果。sql

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)輸出每行的拖尾空格,缺省爲offspa

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 offssr

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

spool_test.sh腳本以下:table

#!/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 exitclass

執行./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|20080307test

記住在腳本文件中最後要加exit,不然輸出文件會包含sql語句。date

相關文章
相關標籤/搜索