1. 程式人生 > 實用技巧 >使用sql*loader將excel等檔案中的資料傳至oracle

使用sql*loader將excel等檔案中的資料傳至oracle

這兩天工作中就大量地遇到這個問題,如何將EXCEL中大量的資料匯入到oracle資料庫中。工作內容就是如果excel中的資料少,就一列一列複製到PL/SQL developer中選定表執行,如果表中的資料龐大就修改excel中的內容,將EXCEL中的內容修改地和oracle中的表結構一致後使用工具軟體匯入。 作為一個有志青年,我不能做一個不求甚解的人。經過查詢資料,我理解了將excel匯入oracle中的本質:SQL*loader 。 SQL*loader作為oracle中非常常用的功能,大家一定要多多練習,多多使用,才能慢慢地掌握這個工具,通過這也能理解oracle設計中的精妙之處。 Sql*loader是個工具,oracle公司封裝了它的實現,我們很好的利用這個工具能解決很多的向oracle資料庫中匯入資料的問題。 如圖所示,控制檔案是整個操作的核心。正確合理的運用控制檔案是整個操作的關鍵。

閒話不多說,開始試驗。 1,測試在控制檔案中直接新增資料。 試驗過程全部在scott的schema中操作。我們新建一個表 SQL> SQL> show user User is "scott" SQL> select table_name from tabs; TABLE_NAME ------------------------------ DEPT EMP BONUS SALGRADE SQL> create table test( 2id number, 3name varchar2(30)); Table created SQL> select table_name from tabs; TABLE_NAME ------------------------------ DEPT EMP BONUS SALGRADE TEST SQL 我們想向test中新增資料,編輯控制檔案 ldr_test.ctl 內容如下 /*
後為註釋內容 load data /*控制檔案開頭,表明開始載入 infile * /*表明資料檔案的位置,*表示資料檔案在控制檔案中 insert into table test /*表明要插入資料庫中的表 fields terminated by "," /*表明檔案資料檔案要用什麼來分隔表示不同的內容 (id,name) /*此為引述的資料庫中表的結構 Begindata /*此標誌下面都是要引用的資料了 1,tom /*第一個元素,id為1,name為tom 2,lily 開啟命令列視窗,執行sqlldr scott/tiger control=C:\ldr_test.ctl

提示成功。由於我在c盤根目錄下執行,所以日誌檔案會自動生成在C盤根目錄下。開啟c盤。看到ldr_test.log檔案。開啟內容如下 SQL*Loader: Release 10.1.0.2.0 - Production on 星期五 12月 28 21:02:15 2012 Copyright (c) 1982, 2004, Oracle.All rights reserved. 控制檔案: C:\ldr_test.ctl 資料檔案: C:\ldr_test.ctl 錯誤檔案: C:\ldr_test.bad 廢棄檔案: 未作指定 : (可廢棄所有記錄) 要載入的數: ALL 要跳過的數: 0 允許的錯誤: 50 繫結陣列: 64 行, 最大 256000 位元組 繼續:
未作指定 所用路徑: 常規 表 TEST,已載入從每個邏輯記錄 插入選項對此表 REPLACE 生效 列名 位置 長度 中止 包裝資料型別 ------------------------------ ---------- ----- ---- ---- --------------------- ID FIRST * , CHARACTER NAME NEXT * , CHARACTER 表 TEST: 2 行 載入成功。 由於資料錯誤, 0 行 沒有載入。 由於所有 WHEN 子句失敗, 0 行 沒有載入。 由於所有欄位都為空的, 0 行 沒有載入。 為繫結陣列分配的空間: 33024 位元組 (64 行) 讀取 緩衝區位元組數: 1048576 跳過的邏輯記錄總數: 0 讀取的邏輯記錄總數: 2 拒絕的邏輯記錄總數: 0 廢棄的邏輯記錄總數: 0 從 星期五 12月 28 21:02:15 2012 開始執行 在 星期五 12月 28 21:02:15 2012 處執行結束 經過時間為: 00: 00: 00.08 CPU 時間為: 00: 00: 00.05 控制檔案的第三句話要詳細說明一下,insert into table test ,insert語句表明要向表test中插入,但是要求後面的表為空。除了insert外還有replace ,append,truncate 3個不同的動作。Replace表示先delete表中全部資料,然後再insert資料。Truncate動作和replace動作類似,但是truncate動作時以truncate方式刪除表中的資料。 有了資料巢狀在控制檔案中的方式的基礎,我們研究下如何從excel中的資料匯入到oracle中,這裡我們編輯一個excel檔案。

控制檔案已經說明 field terminated by “,” 但是excel中的檔案不是以逗號組成的二元組形式。所以,我們只要把excel中的資料儲存成以逗號組成的二元組就行了。Excel中提供了這樣的儲存方式,只要在另存為選項中選擇csv(comma separate values)

儲存過後我們可以用記事本開啟剛才的資料文件,我們發現已經如我們願成為想要的格式了。現在只需要修改控制檔案。 load data infile ldr_testdata.csv /*一定要注意執行時的目錄,檔名加目錄會報錯 append into table test fields terminated by "," (id,name)

Sqlldr命令執行成功,這時我們返回資料庫中檢視下

成功新增。 經過多次的試驗,得出cmd中執行的環境非常重要。Sqlldr的低階用法就寫到這裡,明天繼續做試驗,進行sqlldr的高階內容試驗。 為了夢想,加油。

轉載於:https://blog.51cto.com/bestlanzi/1103529