隨筆-314  評論-209  文章-0  trackbacks-0

          要輸出符合要求格式的數(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è)定的分隔符對字段進行分割,方法二將分隔符拼接在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文件的格式,這樣可以減小出錯的可能性,避免走很多彎路。

          posted on 2009-09-27 09:20 xzc 閱讀(1343) 評論(3)  編輯  收藏 所屬分類: Oracle

          評論:
          # re: Oracle中spool命令實現(xiàn)的兩種方法比較 2009-09-27 09:21 | xzc
          set trimspool on
          set linesize 120
          set pagesize 2000
          set newpage 1
          set heading off
          set term off
          spool 'd:\exp.txt'
          select owner || ',' || table_name || '..' from all_tables;
          spool off
            回復(fù)  更多評論
            
          # re: Oracle中spool命令實現(xiàn)的兩種方法比較 2010-05-10 17:22 | xzc
          sqlplus -s infsett/infsett@odsstat 1>&- <<EOF
          set echo off
          set pagesize 0
          SET LINESIZE 2500
          set trimspool on
          set heading off
          set feedback off
          set termout off
          spool /odsstatfs/groupfile/${file_name}
          select 'START' from dual where rownum <= 1
          union all
          ${table_sql}
          union all
          select 'C::|${file_name}|'||count(*) from (${table_sql});
          spool off;
          exit;
          EOF  回復(fù)  更多評論
            
          # re: Oracle中spool命令實現(xiàn)的兩種方法比較 2010-05-10 17:27 | xzc
          spool常用的設(shè)置
          set colsep' ';    //域輸出分隔符
          set echo off;    //顯示start啟動的腳本中的每個sql命令,缺省為on
          set feedback off;  //回顯本次sql命令處理的記錄條數(shù),缺省為on
          set heading off;   //輸出域標(biāo)題,缺省為on
          set pagesize 0;   //輸出每頁行數(shù),缺省為24,為了避免分頁,可設(shè)定為0。
          set termout off;   //顯示腳本中的命令的執(zhí)行結(jié)果,缺省為on
          set trimout on;   //去除標(biāo)準(zhǔn)輸出每行的拖尾空格,缺省為off
          set trimspool on;  //去除重定向(spool)輸出每行的拖尾空格,缺省為off
            回復(fù)  更多評論
            
          主站蜘蛛池模板: 五指山市| 黄龙县| 资阳市| 怀仁县| 长宁区| 武清区| 滨州市| 浦城县| 江华| 库伦旗| 漳州市| 宣威市| 沭阳县| 湖州市| 淮滨县| 佛冈县| 韶关市| 平乐县| 汕尾市| 固始县| 常山县| 浑源县| 报价| 阿坝| 来宾市| 霍山县| 工布江达县| 奈曼旗| 肇庆市| 建平县| 思茅市| 承德市| 苍溪县| 图木舒克市| 民丰县| 黑龙江省| 宜宾市| 莎车县| 吉木乃县| 满城县| 东乌珠穆沁旗|