關於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