Oracle中spool命令實現(xiàn)的兩種方法比較 |
發(fā)布時間: 2012/8/10 17:13:21 |
要輸出符合要求格式的數(shù)據(jù)文件只需在select時用字符連接來規(guī)范格式。比如有如下表 SQL>; select id,username,password from myuser;//測試表 1 John 1234 2 Jack 12345 3 Rose 2345 4 Joe 384657 5 Tom 384655 6 Jordan 384455 要輸出符合1,John,1234,這樣的數(shù)據(jù)格式就用select id||','||username||','||password||',' from myuser這樣的語句。 SQL>; select id||','||username||','||password||',' from myuser; 1,John,1234, 2,Jack,12345, 寫個下面這樣的腳本就行可以輸出符合要求格式的數(shù)據(jù)至文件中,不會含有其它不需要東西,只有數(shù)據(jù)部分。 --腳本文件名為expmyusr.sql,存數(shù)據(jù)的文件名為e:\exp.txt set echo on --是否顯示執(zhí)行的命令內(nèi)容 set feedback off --是否顯示 * rows selected set heading off --是否顯示字段的名稱 set verify off --是否顯示替代變量被替代前后的語句。fil set trimspool off --去字段空格 set pagesize 1000 --頁面大小 set linesize 50//linesize設(shè)定盡量根據(jù)需要來設(shè)定,大了生成的文件也大 define fil= 'e:\exp.txt' prompt *** Spooling to &fil spool &fil select id||','||username||','||'"'||password||'"' from myuser; spool off; --執(zhí)行過程 SQL>; @e:\expmyusr.sql *** Spooling to e:\exp.txt 1,John,"1234" 2,Jack,"12345" 3,Rose,"2345" 4,Joe,"384657" 5,Tom,"384655" 6,Jordan,"384455" 檢查可知結(jié)果符合要求。 Oracle SPOOL的兩種方法之對比 通常情況下,我們使用SPOOL方法,將數(shù)據(jù)庫中的表導(dǎo)出為文本文件的時候會采用兩種方法,如下述: 方法一:采用以下格式腳本 set colsep '' ------設(shè)置列分隔符 set trimspool on set linesize 120 set pagesize 2000 set newpage 1 set heading off set term 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 比較以上方法,即方法一采用設(shè)定分隔符然后由sqlplus自己使用設(shè)定的分隔符對字段進(jìn)行分割,方法二將分隔符拼接在SELECT語句中,即手工控制輸出格式。 在實踐中,我發(fā)現(xiàn)通過方法一導(dǎo)出來的數(shù)據(jù)具有很大的不確定性,這種方法導(dǎo)出來的數(shù)據(jù)再由sql ldr導(dǎo)入的時候出錯的可能性在95%以上,尤其對大批量的數(shù)據(jù)表,如100萬條記錄的表更是如此,而且導(dǎo)出的數(shù)據(jù)文件狂大。 而方法二導(dǎo)出的數(shù)據(jù)文件格式很規(guī)整,數(shù)據(jù)文件的大小可能是方法一的1/4左右。經(jīng)這種方法導(dǎo)出來的數(shù)據(jù)文件再由sqlldr導(dǎo)入時,出錯的可能性很小,基本都可以導(dǎo)入成功。 因此,實踐中我建議大家使用方法二手工去控制spool文件的格式,這樣可以減小出錯的可能性,避免走很多彎路。 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |