使用sql*loader將excel等檔案中的資料傳至oracle
阿新 • • 發佈:2020-10-09
這兩天工作中就大量地遇到這個問題,如何將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