我們在工作中,也許會碰到以下情況,客戶或者同事發來需要調查的數據,並不是dmp文件,而是excel文件,此時通常是一張表,少量幾條記錄.最近我恰好碰到了這種情況,所以做了些調查,不敢藏私,拿出來跟大家分享下. 一般的做法,只能對着excel拼寫sql語句.如果列數少還好說,表的列數一多的話,這方法既費時又費力.有什么辦法可以快捷地導入數據呢?以下的方案可以供大家參考:
Sql*Loader
操作步驟如下:
- 錄入excel測試表格,test.xls。
- 另存為.csv格式
- 創建sql*loader控制文件test.ctl,內容如下:
Load data
Infile 'c:\test.csv'
insert Into table test Fields terminated by ','(column1,column2,column3,column4,column5)
需要將數據文件拷貝到對應位置 - 到數據庫中建立對應的測試表test
create table test (
column1 Varchar2(10),
column2 Varchar2(10),
column3 Varchar2(10),
column4 Varchar2(10),
column5 Varchar2(10)
) - 執行導入命令
Sqlldr userid = system/manager control='C:\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)ctl文件內容說明:
Load data
Infile 'e:\test.csv' --數據源文件名稱
Append|insert|replace --append在表后追加insert插入空表replace替代原有內容
Into table test --要導入的數據庫表名稱
[when id = id_memo] --過濾條件
Fields terminated by',' --字段分隔符
(id,name,telphone) --字段名稱列表
說明:
這種方法的好處是sql*loader是oracle自帶軟件,無需安裝額外的軟件.缺點是操作比較麻煩點,而且如果表列數很多的話,輸入字段名稱列表會比較麻煩,適合導入大量數據.
PL Sql Developer 方法一
-
打開excel給需要拷貝的數據增加一個空的起始列 , 選中所要更新的數據, ctr+c
-
打開PL SQl Developer
-
輸入select * from tab_name for update,按F8運行
-
打開鎖,此時記錄集處於可以編輯的狀態,
-
點擊選中整行, ctrl+v,commit,大功告成
-
說明:這種方法其實是利用PL/SQL developer 對於記錄集可以進行整行和多行復制粘貼的特性,toad似乎沒有這樣快速的辦法;
- 在excel表格的列新追加空列的原因是在PL/SQL Developer選中整行進行粘貼時,前面會有個列數的列,所以要新增加一列,否則會造成列的錯位.
- 這種方法處理少量數據的時候最合適,快捷方便,但是: excel的列必須與表中的列完全匹配
PL Sql Developer 方法二
使用PL SQL Developerd的text importer,這種方法簡單方便,推薦此種方法
方法很簡單:
- 點擊tools->text importer
- 在Data from txtfile 頁面選擇要導入的文件,在Data to Oracle 界面選擇要導入的庫和表即可
- 此時可以看到導入結果預覽,還可以查看生成的sql語句,並且對於列可以智能匹配,妙用多多.當然點擊Import 就OK了
說明:
這種方法簡單可靠,適合導入大量的數據,我猜測這個工具其實是后台根據excel的列生成了相應的sql語句,取代人工拼寫sql語句的過程,呵呵,就算生成的sql語句因為一些原因,不是很正確,也可以手工修改.這樣既自動又可以手動加以控制,我比較推薦這種方法.
前提是要安裝PL/Sql Developer,呵呵
綜述:
我這篇文章主要介紹了兩種工具用於將excel導入oracle,如果在客戶的服務器上等環境受限的情況,沒有PL/Sql Developer的話,使用Sql*Loader是個不錯的選擇;PL/SQL Developer的兩種使用方法可以靈活使用,前者快速方便,后者可控性更好,而且無需字段匹配.