將 Excel 試算表資料批次匯入 Oracle 資料庫是常見需求。SQL*Loader 作為 Oracle 高效能資料載入工具,支援多種格式、錯誤處理與平行載入。本文以 Excel 2000 為例,詳細說明從另存文字檔、建立控制檔、執行載入到驗證結果的完整流程。
test.xls 備份text.txt,存放於 C:\關鍵點:Tab 分隔檔的分隔符為 X'09' (ASCII 9),SQL*Loader 控制檔需對應設定。
-- 以 system/manager 登入
CONN system/manager
CREATE TABLE test (
id NUMBER, -- 序號
username VARCHAR2(10), -- 用戶名
password VARCHAR2(10), -- 密碼
created_dt VARCHAR2(20) -- 建立日期
);
建議:日期欄位優先使用 DATE 型別,匯入後再轉型,避免格式不符導致錯誤記錄。
建立 C:\input.ctl,內容如下:
LOAD DATA
INFILE 'C:\text.txt'
APPEND INTO TABLE test
FIELDS TERMINATED BY X'09'
(id, username, password, created_dt)
| 子句 | 說明 |
|---|---|
| LOAD DATA | 控制檔標識,固定開頭 |
| INFILE | 輸入資料檔路徑 |
| APPEND | 資料載入模式:追加(表可有資料) |
| FIELDS TERMINATED BY | 欄位分隔符,X'09' 為 Tab |
| (欄位清單) | 對應資料檔欄位順序映射至表欄位 |
開啟 DOS 命令提示字元:
C:\> sqlldr userid=system/manager control=C:\input.ctl
C:\> sqlldr userid=system/manager@serviceName_192.168.1.248 control=C:\input.ctl
input.log — 載入統計、錯誤摘要input.bad — 格式錯誤、約束違規的記錄input.dsc — 不符合 WHEN 條件的記錄(若有指定)CONN system/manager
SELECT * FROM test;
SELECT COUNT(*) FROM test;
對比 input.log 中「Rows successfully loaded」與原 Excel 筆數,檢查 input.bad 確認異常資料。
-- 控制檔中指定日期格式
created_dt DATE 'YYYY-MM-DD HH24:MI:SS'
-- 使用選擇性封閉字符
FIELDS TERMINATED BY X'09' OPTIONALLY ENCLOSED BY '"'
sqlldr userid=system/manager control=input.ctl PARALLEL=TRUE DIRECT=TRUE
DIRECT=TRUE:直接路徑載入,繞過 SQL 層,速度更快PARALLEL=TRUE:多進程平行載入,需配合分區表或多個資料檔ERRORS=1000 -- 允許最多 1000 筆錯誤才停止
SQL*Loader 是 Oracle 資料載入的利器,掌握控制檔語法、載入模式、直接路徑與平行載入技巧,能高效完成從 Excel、CSV、定寬檔等各類來源的資料遷移。生產環境建議先在測試環境驗證控制檔與資料樣本,確認無誤後再排程執行,並妥善保存日誌與壞記錄檔供稽核追蹤。