將 Excel 資料大量載入 Oracle,SQL*Loader 是最高效路徑。本文以 Excel → 制表符分隔文字檔 → SQL*Loader 控制檔 → 載入資料表 為主線,完整記錄從建表、檔案轉換、控制檔撰寫、命令執行到驗證的端到端流程。
前置準備
- Excel 2000 輸入資料 → 另存為 制表符分隔文字檔
test.txt(編碼 ANSI/UTF-8 需與資料庫字元集一致)
- SQL*Plus 以
system/manager 登入建立目標表
1. 建立目標表
CONN system/manager
CREATE TABLE test (
id NUMBER, -- 序號
username VARCHAR2(10), -- 使用者名稱
password VARCHAR2(10), -- 密碼
sj VARCHAR2(20) -- 建立日期
);
2. 撰寫 SQL*Loader 控制檔
檔名:input.ctl(儲於 C:\)
LOAD DATA
INFILE 'test.txt'
APPEND INTO TABLE test
FIELDS TERMINATED BY X'09' -- 制表符 Tab (十六進位 09)
(
id,
username,
password,
sj
)
關鍵選項說明
| 選項 | 含義 |
INSERT | 預設,要求表為空 |
APPEND | 追加模式,保留既有資料 |
REPLACE | 刪除舊資料再載入 |
TRUNCATE | 截斷表再載入(高水位歸零) |
3. 執行載入命令
本地資料庫
C:\> sqlldr userid=system/manager control=input.ctl
- 預設日誌:
input.log
- 壞記錄檔:
input.bad
- 捨棄檔:
input.dsc(若有 WHEN 條件)
遠端資料庫
C:\> sqlldr userid=system/manager@serviceName_192.168.1.248 control=input.ctl
4. 驗證結果
- SQL*Plus 查詢:
SELECT * FROM test;
- 對照
input.log 載入筆數、錯誤筆數與原始 test.xls
- 檢查
input.bad 分析失敗原因(資料型別不符、長度超限、約束違反)
進階技巧
- 日期欄位:控制檔加
sj DATE 'YYYY-MM-DD HH24:MI:SS' 指定格式
- 序號自動產生:
id SEQUENCE(MAX,1) 或 id EXPRESSION "seq.nextval"
- 大檔案並行:
PARALLEL=TRUE + 多控制檔分區載入
- Direct Path Load:
DIRECT=TRUE 繞過 SQL 層直寫資料區塊,極大提升速度(需獨佔表)
- External Table:10g+ 可用
CREATE TABLE ... ORGANIZATION EXTERNAL 以 SQL 直接查詢文字檔
結語
Excel → 制表符文字檔 → SQL*Loader 是中小量異構資料載入的黃金組合。掌握 FIELDS TERMINATED BY X'09'、APPEND/REPLACE/TRUNCATE、DIRECT=TRUE 三大關鍵,即能應對 90% 實務場景。超大量資料請改用 Data Pump 或 External Table + Parallel DML。
- 上一篇文章: Oracle 9i on AIX 效能調優全景:記憶體交換控制、文件快取調校、交換區規劃、優先級排程、區塊大小與 SGA 調優
- 下一篇文章: Oracle Spatial 空間資料加密實作:自訂解密函數與雙重金鑰硬體綁定方案
Copyright ©
程式碼之家 All Rights Reserved