熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

OracleSpool的用法小結

2013-11-13 15:32:03  來源: Oracle 

  在生產中常會遇到需要將數量比較大的表值導入到本地文本文件中 方法有很多種比較常用的就是spool命令: 要輸出符合要求格式的數據文件只需在select時用字符連接來規范格式比如有如下表

  SQL>; select idusernamepassword from myuser;//測試表

   John   

   Jack   

   Rose   

   Joe       

   Tom       

   Jordan    

  要輸出符合John這樣的數據格式就用select id||||username||||password|| from myuser這樣的語句

  SQL>; select id||||username||||password|| from myuser;

  John

  Jack

  寫個下面這樣的腳本就行可以輸出符合要求格式的數據至文件中不會含有其它不需要東西只有數據部分

  --腳本文件名為expmyusrsql存數據的文件名為e:\exptxt

  set echo on            是否顯示執行的命令內容  set feedback off       是否顯示 * rows selected  set heading off        是否顯示字段的名稱set verify off         是否顯示替代變量被替代前後的語句filset trimspool off      去字段空格

  set pagesize       頁面大小set linesize //linesize設定盡量根據需要來設定大了生成的文件也大

  define fil= e:\exptxt

  prompt *** Spooling to &fil

  spool &fil

  select id||||username||||||password|| from myuser;

  spool off;

  --執行過程

  SQL>; @e:\expmyusrsql

  *** Spooling to e:\exptxt

  John

  Jack

  Rose

  Joe

  Tom

  Jordan

  檢查可知結果符合要求

  ·Oracle SPOOL的兩種方法之對比

  通常情況下我們使用SPOOL方法將數據庫中的表導出為文本文件的時候會采用兩種方法如下述

  方法一采用以下格式腳本

  set colsep 設置列分隔符

  set trimspool on

  set linesize

  set pagesize

  set newpage

  set heading off

  set term off

  spool 路徑+文件名

  select * from tablename;

  spool off

  方法二采用以下腳本

  set trimspool on

  set linesize

  set pagesize

  set newpage

  set heading off

  set term off

  spool 路徑+文件名

  select col||||col||||col||||col|| from tablename;

  spool off

  比較以上方法即方法一采用設定分隔符然後由sqlplus自己使用設定的分隔符對字段進行分割方法二將分隔符拼接在SELECT語句中即手工控制輸出格式

  在實踐中我發現通過方法一導出來的數據具有很大的不確定性這種方法導出來的數據再由sql ldr導入的時候出錯的可能性在%以上尤其對大批量的數據表萬條記錄的表更是如此而且導出的數據文件狂大

  而方法二導出的數據文件格式很規整數據文件的大小可能是方法一的/左右經這種方法導出來的數據文件再由sqlldr導入時出錯的可能性很小基本都可以導入成功

  因此實踐中我建議大家使用方法二手工去控制spool文件的格式這樣可以減小出錯的可能性避免走很多彎路


From:http://tw.wingwit.com/Article/program/Oracle/201311/16869.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.