<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0
    • 摘要:在生產中常會遇到需要將數量比較大的表值導入到本地文本文件中. 方法有很多種,比較常用的就是spool命令,本文將為大家介紹這個命令的實現,以及兩種實現方法的對比。
    • 標簽:Oracle  spool  比較

    要輸出符合要求格式的數據文件只需在select時用字符連接來規范格式。比如有如下表

    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,這樣的數據格式就用select id||','||username||','||password||',' from myuser這樣的語句。

    SQL>; select id||','||username||','||password||',' from myuser;
    1,John,1234,
    2,Jack,12345,

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

    --腳本文件名為expmyusr.sql,存數據的文件名為e:\exp.txt

    set echo on            --是否顯示執行的命令內容  
    set feedback off       --是否顯示 *   rows   selected 
    set heading off        --是否顯示字段的名稱
    set verify off         --是否顯示替代變量被替代前后的語句。fil
    set trimspool off      --去字段空格
    set pagesize 1000      --頁面大小
    set linesize 50//linesize設定盡量根據需要來設定,大了生成的文件也大
    define fil= 'e:\exp.txt'
    prompt *** Spooling to &fil
    spool &fil
    select id||','||username||','||'"'||password||'"' from myuser;
    spool off;

     

    --執行過程
    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"

    檢查可知結果符合要求。

    Oracle SPOOL的兩種方法之對比 

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

    方法一:采用以下格式腳本 

    set colsep '' ------設置列分隔符
    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

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

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

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

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

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

    評論:
    # re: Oracle中spool命令實現的兩種方法比較 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
      回復  更多評論
      
    # re: Oracle中spool命令實現的兩種方法比較 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  回復  更多評論
      
    # re: Oracle中spool命令實現的兩種方法比較 2010-05-10 17:27 | xzc
    spool常用的設置
    set colsep' ';    //域輸出分隔符
    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
      回復  更多評論
      
    主站蜘蛛池模板: 一级成人a毛片免费播放| 久久成人永久免费播放| 黄瓜视频影院在线观看免费| 国产av天堂亚洲国产av天堂| 国内精品免费久久影院| 国产成人精品日本亚洲专区61| 青青免费在线视频| 亚洲精品成人a在线观看| 国产亚洲情侣久久精品| www国产亚洲精品久久久日本| 国产精品亚洲lv粉色| 亚洲M码 欧洲S码SSS222| 一级毛片在线免费播放| 亚洲情XO亚洲色XO无码| 日韩免费电影网址| 亚洲国产午夜精品理论片| 日韩欧美一区二区三区免费观看 | 久久无码av亚洲精品色午夜| 欧洲美熟女乱又伦免费视频| 国产亚洲视频在线播放大全| 亚洲第一页综合图片自拍| 精品国产呦系列在线观看免费| 亚洲av永久无码精品国产精品| 女人18毛片水真多免费播放| 亚洲第一街区偷拍街拍| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲精品无码久久一线| 久久午夜伦鲁片免费无码| 99999久久久久久亚洲| 国产乱色精品成人免费视频| 中文字幕免费在线看线人动作大片 | 亚洲成人网在线观看| 日韩高清免费在线观看| A国产一区二区免费入口| 亚洲网址在线观看你懂的| 好吊妞在线成人免费| 国产精品免费大片一区二区| 亚洲精品高清国产麻豆专区| 国产精品免费视频播放器| 久久国产乱子精品免费女| 亚洲熟妇成人精品一区|