sqlplus中使用spool導出數據(轉)

關於SPOOL(SPOOL是SQLPLUS的命令,不是SQL語法裏面的東西。)
對於SPOOL數據的SQL,最好要本身定義格式,以方便程序直接導入,SQL語句如:
T_port表中:select t.dslamip||'|'||t.dslamno from t_port t where t.dslamip='200.224.49.5';
spool經常使用的設置
set colsep '|';    //域輸出分隔符: 最好在SQL中本身指定。
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
set linesize 2500;     //設定每行的size
注:LINESIZE要稍微設置大些,省得數據被截斷,它應和相應的TRIMSPOOL結合使用防止導出的文本有太多的尾部空格。可是若是LINESIZE設置太大,會大大下降導出的速度,另外在WINDOWS下導出最好不要用PLSQL導出,速度比較慢,直接用COMMEND下的SQLPLUS命令最小化窗口執行。
對於字段內包含不少回車換行符的應該給與過濾,造成比較規矩的文本文件。一般狀況下,咱們使用SPOOL方法,將數據庫中的表導出爲文本文件的時候會採用兩種方法,以下述:
方法一:採用如下格式腳本 
        set colsep '|'               --設置|爲列分隔符
  set trimspool on
  set linesize 120
  set pagesize 2000         
  set newpage 1
  set heading off           
  set term off
        set num 18                 
        set feedback off           
  spool 路徑+文件名
  select * from tablename;
  spool off
方法二:採用如下腳本
      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
比較以上方法,即方法一採用設定分隔符而後由sqlplus本身使用設定的分隔符對字段進行分割,方法二將分隔符拼接在SELECT語句中,即手工控制輸出格式。
在實踐中,發現經過方法一導出來的數據具備很大的不肯定性,這種方法導出來的數據再由sqlldr導入的時候出錯的可能性在95%以上,尤爲對大批量的數據表,如100萬條記錄的表更是如此,並且導出的數據文件狂大。
而方法二導出的數據文件格式很規整,數據文件的大小多是方法一的1/4左右。經這種方法導出來的數據文件再由sqlldr導入時,出錯的可能性很小,基本均可以導入成功。
 
導出文本數據的建議格式:
SQL*PLUS環境設置:
                SET NEWPAGE NONE
                SET HEADING OFF
                SET SPACE 0
                SET PAGESIZE 0
                SET TRIMOUT ON
                SET TRIMSPOOL ON
                SET LINESIZE 2500
                spool 路徑+文件名
                select col1||','||col2||','||col3||','||col4||'..' from tablename;
                spool off
相關文章
相關標籤/搜索