Oracle匯入excel資料方法彙總
阿新 • • 發佈:2019-01-26
摘要:在程式編制過程和資料彙總交換過程中,經常會碰到需要將其他人員在office辦公環境下編制的檔案資料內容匯入oracle中的情況。目前程式開發者經常使用的方法有如下幾種:1,使用oracle提供的匯入工具sql*loader;2,使用plsql developer工具;3使用其他資料轉移工具做中轉站。下面我們採用例項的方式分別描述幾種匯入方式的優缺點及其操作步驟。假設‘e:/test.xls’檔案中存在三列資料分別代表客戶編號,客戶名稱和聯絡電話。其內容如下:
使用sql *loader
SQL*LOADER是oracle的資料載入工具,在NT下sql*loader的命令為SQLLDR,在UNIX下一般為SQLLDR/SQLLOAD。通常用來將作業系統檔案遷移到oracle資料庫中。它是大型資料倉庫選擇使用的載入方法,因為它提供了最快速的途徑(direct,parallel)。但這種方法要求儲存資料的oracle表是已經存在的。
使用這種方法匯入excel內容到oracle時,首先需要將excel檔案另存為文字格式,檔案型別選文字型別或者csv型別即將e:/test.xls另存為e:/test.csv。
如果oracle沒有對應儲存資料的表結構,則需要建立表test(id,name,telphone)。
用記事本建立sql*loader控制檔案test.ctl(ctl字尾是企圖證明這是一個控制檔案,但實際上這個檔案字尾不重要,使用者可以自由選擇,但檔案格式一定要是文字格式),內容如下:
Load data
Infile ‘e:/test.csv’ -- 資料來源檔名稱
Append|insert|replace --append在表後追加,insert插入空表,replace替代原有內容
Into table test --要匯入的資料庫表名稱
[when id = id_memo] --過濾條件
Fields terminated by X’09’ --欄位分隔符
(id,name,telphone) --欄位名稱列表
最後在命令視窗輸入sqlldr命令列執行匯入操作Sqlldr userid = system/manager control=’e:/test.ctl’
Sqlldr的函式關鍵字說明:
Userid --oracle 使用者名稱 userid = username/password
Control --控制檔名稱 control = ‘e:/insert.ctl’
Log –-日誌檔名稱 log = ‘e:/insert.log’
Bad --損壞檔名稱
Data --data file name
Discard --discard file name
Discardmax --number of discards to allow(預設全部)
Skip --匯入時跳過的記錄行數(預設0)
Load --匯入時匯入的記錄行數(預設全部)
Errors --允許錯誤的記錄行數(預設50)
使用plsql developer
PL/SQL Developer是一種專門用於開發、測試、除錯和優化oracle PL/SQL儲存程式單元,比如觸發器,儲存過程,函式和程式包等整合開發環境。
在單個檔案資料不多(小於10w行),並且目的表結構已經存在的情況下可以使用plsql developer工具將excel內容直接通過簡單的copy,paste操作匯入oracle資料庫。具體操作方式如下:
l在plsql developer的sql window裡輸入select * from test for update,其中test是要匯入的oracle資料表名稱;
l執行查詢(通過點選按鈕或者快捷鍵F8可以實現);
l點選查詢結果上面的鎖狀按鈕,使得查詢到的內容處於編輯狀態。
l從excel資料表中copy(ctrl +C)要匯入oracle中的資料,如果是單列資料匯入,可以先按plsql developer中查詢結果上面的“新增(+)”按鈕,使得資料表處於新增資料狀態,然後將滑鼠在plsql developer的列名稱上單擊,最後使用快捷鍵ctrl + v 完成資料匯入操作,並單擊plsql developer中的“提交(對號)”按鈕提交所做的修改。
l如果是同時匯入所有列,首先選擇copy所有資料,然後點增加(+)並點選編輯那一行最前面的星號使得整行資料都處於被選擇狀態,最後paste即可將資料匯入。
l如果分列匯入資料,則需要逐列完成,首先選擇copy要匯入的資料,然後然後點增加(+)並點選編輯那一列的名稱,使得整列資料都處於被選擇狀態,最後paste即可將資料匯入。
使用PLSQL developer執行資料的匯入和匯出操作主要存在的問題是在大資料量情況下對中文資料可能出錯,估計將接收資料表的型別定義為nvarchar2的型別會比較好一點。另外,就是這種方法需要人工更多的參與,不能達到自動匯入的效果。
使用sql server中轉
這部操作執行時,需要先用sqlserver的匯入匯出工具將excel內容匯入sqlserver資料庫中,然後使用同樣的工具將sqlserver中轉內容匯入oracle資料庫,這裡需要兩次的資料複製與IO操作,效率相對是比較低的。並且根據csdn網友jkflyfox的描述,這種方式下需要將oracle檔案的名稱全部大寫,否則會出錯。
10001 | zjaxi01 | 13562485246 |
10002 | zjaxi02 | 13562485247 |
10003 | zjaxi03 | 13562485248 |
10004 | zjaxi04 | 13562485249 |
10005 | zjaxi05 | 13562485250 |
10006 | zjaxi06 | 13562485251 |
10007 | zjaxi07 | 13562485252 |
10008 | zjaxi08 | 13562485253 |
10009 | zjaxi09 | 13562485254 |
10010 | zjaxi10 | 13562485255 |
10011 | zjaxi11 |
13562485256 |
10012 | zjaxi12 | 13562485257 |
10013 | zjaxi13 | 13562485258 |
10014 | zjaxi14 | 13562485259 |