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

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

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

    程序人生

    記錄編程中的點點滴滴

    Oracle sqllder 數(shù)據(jù)導(dǎo)入

    操作環(huán)境

    客戶端 Oracle 10g

    服務(wù)端 Oracle 11g

    1、數(shù)據(jù)準備

    1.1、在sqlplus下將相關(guān)表將相關(guān)待導(dǎo)入數(shù)據(jù)導(dǎo)出為txt文件

    --sqlplus腳本
    Set linesize 3000    --每行長3000
    Set pagesize 0       --指定不分頁
    Set heading off      --不輸出標題行
    Set feedback off     --不輸出反饋信息
    Set echo off         --不顯示命令本身
    Set termout off      --不顯示終端信息
    Set trimout On       --截斷終端顯示空格
    Set trimspool On     --截斷輸出至日志空格
    spool c:\a.txt       --指定屏幕輸出到相關(guān)文件
    spool off            --關(guān)閉指定輸出

    以上腳本控制sqlplus控制臺輸出打印效果, 同時指定屏幕的打印輸出將轉(zhuǎn)錄入到何文件中

    實際腳本

    sqlplus zhsj/zhsj@zhsj
    Set linesize 3000   
    Set pagesize 0      
    Set heading off     
    Set feedback off    
    Set echo off        
    Set termout off     
    Set trimout On      
    Set trimspool On    
    spool c:\a.txt      
    select employee_id||'|'||employee_name||'|'||employee_salary from t_employee;
    spool off           

    以上會將t_employee表中的 employee_id、employee_name、employee_salary 三列數(shù)據(jù)以如下形式寫入c:\a.txt 文件中

    1|znp|80000.00
    2|zhsj|40000.00
    3|xxx|30000.00

    數(shù)據(jù)準備完成后編寫sqlldr要用到的ctl文件,用于將txt文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,腳本如下 (--部分實際腳本中須刪險)

    -- a.ctl
    Load data   --加載數(shù)據(jù)
    infile a.txt    --加載數(shù)據(jù)文件名稱(現(xiàn)在是相對路徑,可以寫成絕對路徑c:\bak.txt)
    badfile a.bad                   --失敗數(shù)據(jù)寫入文件
    append                     -- append 追加  truncate truncate delete 刪除
    into table t_employee_bak    --插入操作表
    FIELDS TERMINATED BY '|'                 --根據(jù)指定標識符隔斷各字段值 OPTIONALLY ENCLOSED BY '"'  過濾掉指定的標識符,如"等
    (employee_id,                                 --指定插入字段及數(shù)據(jù)
    employee_name,
    employee_salary)

    準備完成后,在cmd下輸入

    sqlldr -userid zhsj/zhsj@zhsj control=c:\a.ctl  

    執(zhí)行,在t_employee_bak表中可以見到a.txt中的數(shù)據(jù)已導(dǎo)入

    在執(zhí)行過程如果出現(xiàn)數(shù)據(jù)沒有導(dǎo)入的情況,可能原因會有以下幾種情況

    1、在導(dǎo)出的數(shù)據(jù)文件中存在同時打印輸出的命令行,將命令行刪除后重新保存文件即可將數(shù)據(jù)正常插入到數(shù)據(jù)庫中
    2、雖然文本中已是正確的數(shù)據(jù)但仍然無法導(dǎo)入,此時在執(zhí)行的SQL腳本中增加一個間隔符的輸出,即

    select employee_id||'|'||employee_name||'|'||employee_salary from t_employee;

    改為

    select employee_id||'|'||employee_name||'|'||employee_salary||'|' from t_employee;

    此時將會正常導(dǎo)入,這是因為列值存在空數(shù)據(jù)導(dǎo)致間隔計算問題

    以上為txt格式數(shù)據(jù)文件導(dǎo)出

    對于異質(zhì)數(shù)據(jù)庫,可以采用sqldeveloper等工具將相關(guān)數(shù)據(jù)庫中數(shù)據(jù)以csv格式導(dǎo)出,此時在編寫執(zhí)行腳本時須變更如下

    -- a.ctl
    Load data   --加載數(shù)據(jù)
    infile a.txt    --加載數(shù)據(jù)文件名稱(現(xiàn)在是相對路徑,可以寫成絕對路徑c:\bak.txt)
    badfile a.bad                   --失敗數(shù)據(jù)寫入文件
    append                           -- append 追加  truncate truncate delete 刪除
    into table t_employee_bak    --插入操作表
    FIELDS TERMINATED BY ','   OPTIONALLY ENCLOSED BY '"'   --根據(jù)指定標識符隔斷各字段值 OPTIONALLY ENCLOSED BY '"'  過濾掉指定的標識符,如"等
    (employee_id,                                 --指定插入字段及數(shù)據(jù)
    employee_name,
    employee_salary)

    因為csv格式文件在用txt打開可以看到數(shù)據(jù)文件格式為"1","znp","80000.00",需要將' " '標識符去掉,才可以正常導(dǎo)入

    大數(shù)據(jù)量時csv格式文件會比txt格式文件大3倍左右,且導(dǎo)入時可能出現(xiàn)問題,所以盡量采用txt文件方式導(dǎo)入



    posted on 2010-12-24 09:49 zhaonp 閱讀(1336) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲午夜AV无码专区在线播放 | 成人国产精品免费视频| 无码少妇一区二区浪潮免费| 久久久亚洲精品国产| 国产午夜精品久久久久免费视 | 最新国产AV无码专区亚洲| 国产大片免费天天看| 国产亚洲自拍一区| 91成人免费观看在线观看| 国产V亚洲V天堂无码久久久| 免费久久人人爽人人爽av| 亚洲无删减国产精品一区| 亚洲一级毛片免费看| 亚洲精品无码久久久久久| 国产jizzjizz视频免费看| 久久九九免费高清视频| 久久精品亚洲日本佐佐木明希| 日韩精品久久久久久免费| 亚洲国产成人久久| 全免费a级毛片免费看无码| 日韩在线观看免费| 亚洲国产三级在线观看| 日本h在线精品免费观看| 久久久国产亚洲精品| 亚洲?V无码成人精品区日韩| 日本高清高色视频免费| 亚洲av永久综合在线观看尤物| 国产网站免费观看| 中文字幕a∨在线乱码免费看| 亚洲视频一区在线观看| 日韩在线看片免费人成视频播放| 成年免费a级毛片| 亚洲精选在线观看| 日本午夜免费福利视频| 毛片基地看看成人免费| 亚洲资源最新版在线观看| 亚洲国产精品成人| 免费A级毛片无码A∨免费| 国产在亚洲线视频观看| 亚洲国产高清在线| 日韩在线免费看网站|