Oracle導入excel數據方法匯總
摘要:在程序編制過程和數據匯總交換過程中,經常會碰到需要將其他人員在office辦公環境下編制的文件數據內容導入oracle中的情況。目前程序開發者經常使用的方法有如下幾種:1,使用oracle提供的導入工具sql*loader;2,使用plsql developer工具;3使用其他數據轉移工具做中轉站。下面我們采用實例的方式分別描述幾種導入方式的優缺點及其操作步驟。假設‘e:\test.xls’文件中存在三列數據分別代表客戶編號,客戶名稱和聯系電話。其內容如下:
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
|
使用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文件的名稱全部大寫,否則會出錯。