2014年2月11日 星期二

Oracle SQLLOADER

今天有收到一個需求,
要將excel資料存回Oracle資料庫。

環境是windows 7,Oracle版本11g。

一開始馬上想到的是PowerPivot
但因為公司的excel版本只到2003,
PowerPivot只能用excel 2010以上版本。
所以只好用別的方式存回去。

在這邊將excel資料抓出來存到txt,
然後使用oracle sqlldr將資料存回去。

oracle sqlldr的使用流程如下:
1. 確認要輸入的txt檔案內容,並修改成輸入的格式。
2. 在目標資料庫先創建好接應的資料表。
3. 建立好輸入資料的 control 檔。
4. 執行sqlldr 讀取 control 檔,寫入資料庫。
5. 確認資料進入資料庫。


先準備好內含資料的 txt 檔,
每個資料以 "," 分隔,
每筆資料要要分行,如下

aaa.txt
----------------------------------
1, aaa, 5555
2, bbb, 6666
3, ccc, 7777
----------------------------------

確認格式正確後,
進入資料庫create相應的table。(原本就有相應的table也可以,不過操作要更注意)

Create table TEST(
A int,
B varchar(20),
C varchar(20)
);

接著寫入ctl檔案,

test.ctl
----------------------------------
load data
infile "aaa.txt" 
badfile "aaa.bad" 
discardfile "aaa.discard" 
into table TEST
fields terminated by ','
 ( A, B, C)
----------------------------------

load data     (說明要幹嘛)
infile "aaa.txt"     (匯入資料檔案位址)
badfile "aaa.bad"    (放資料格式不符合的)
discardfile "aaa.discard"    (放不符合過濾條件的)
into table TEST    (資料存放的table)
fields terminated by ','     (資料用甚麼分隔)

接著進入cmd,找到oracle安裝位址的bin資料夾
D:\app\Q\product\11.2.0\dbhome_1\BIN>set ORACLE_SID=YourDbName
D:\app\Q\product\11.2.0\dbhome_1\BIN>sqlldr Account/Password control=test.ctl

資料就會進入資料庫了。
請在進入資料庫檢查是否正確。

sqlldr會自動幫你生出一個 test.log 檔案,(檔案名稱會與你的ctl檔相同)
也有bad檔案和discard檔案,若是資料有問題可以去找這幾個檔案檢視。



參考資料:
http://blog.roodo.com/mywork/archives/2015107.html

深入閱讀:
http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_concepts.htm
http://www.dedecms.com/knowledge/data-base/sql-server/2012/0821/11767.html

沒有留言:

張貼留言