首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Excel 數據導入 Oracle 實戰:SQL*Loader 制表符分隔文件完整流程

     編輯:Oracle 資料庫基礎

前言:最通用的異構數據遷移路徑

Excel → 文本 (制表符分隔) → SQL*Loader → Oracle,無需第三方工具、支持大數據量、可腳本化自動化。本文給出從 Excel 另存為到驗證導入的標準化 8 步流程。

一、 標準化 8 步流程

步驟 1-3:Excel 數據準備與導出

  1. 打開 Excel,輸入/整理數據 (表頭建議與目標表列名一致)
  2. 另存為 → 保存類型選 「文本文件 (制表符分隔) (*.txt)」,如 C:\data.txt
  3. 關鍵:制表符 (Tab, Hex 0x09) 作為列分隔符,避免逗號/分號在數據中出現導致解析錯誤

步驟 4:創建目標表 (SQL*Plus)

CONN system/manager
CREATE TABLE test (
  id          NUMBER,
  username    VARCHAR2(10),
  password    VARCHAR2(10),
  created_dt  VARCHAR2(20)  -- 日期建議先以字符串導入,再轉型
);

步驟 5:編寫控制文件 input.ctl

LOAD DATA
INFILE 'C:\data.txt'
APPEND INTO TABLE test
FIELDS TERMINATED BY X'09'   -- 制表符十六進制
(
  id,
  username,
  password,
  created_dt
)

關鍵參數解析

步驟 6:執行 SQL*Loader

-- 本地導入
C:\> sqlldr userid=system/manager control=input.ctl

-- 遠程導入 (需 TNS 別名配置)
C:\> sqlldr userid=system/manager@orcl_tns control=input.ctl

生成文件

  • input.log — 詳細日志 (必看:Rows loaded, Errors, Discards)
  • input.bad — 格式錯誤記錄 (不符合控制文件定義)
  • input.dsc — 篩選條件不符記錄 (WHEN 子句)

步驟 7:驗證導入結果

-- 1. 行數核對
SELECT COUNT(*) FROM test;
-- 對比 .log 中 "Rows successfully loaded"

-- 2. 抽樣核對
SELECT * FROM test WHERE ROWNUM <= 10;
-- 對比 Excel 源數據

-- 3. 錯誤分析
-- 若 .bad 文件非空,檢查數據格式、長度、約束違規

步驟 8:常見問題排查

參數含義示例值
LOAD DATA控制文件標識固定
INFILE數據文件路徑'C:\data.txt'
APPEND/INSERT/REPLACE/TRUNCATE裝載模式APPEND (追加)
FIELDS TERMINATED BY列分隔符X'09' (Tab), ',' (CSV)
TRAILING NULLCOLS允許末尾列為空 (可選)常用於 CSV 末尾空列

二、 進階技巧

  • 大文件並行載入:sqlldr ... PARALLEL=TRUE + 多個控制文件分片 + 表分區/啟用 Direct Path (DIRECT=TRUE)
  • 日期/時間戳轉換:
    created_dt  DATE "YYYY-MM-DD HH24:MI:SS"  -- 控制文件直接轉型
  • 序列自動填充:
    id  EXPRESSION "seq_test.NEXTVAL"  -- 不佔用數據文件列
  • 條件載入:
    INTO TABLE test WHEN (1) = 'Y'  -- 根據第 1 列值決定是否載入
    INTO TABLE test WHEN (1) <> 'Y' -- 互斥條件載入另一表

三、 總結

Excel → Tab 文本 → SQL*Loader 是 Oracle 數據遷移的**基礎技能**。掌握 FIELDS TERMINATED BY X'09'、APPEND、.bad/.log 分析、編碼設置、Direct Path 並行載入,即可應對 90% 異構導入場景。大數據量 (GB 級+) 必用 DIRECT=TRUE PARALLEL=TRUE 繞過 SQL 層直寫數據塊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象原因解決
ORA-01722: invalid number數值列含非數字字符數據清洗、或控制文件用 CHAR 轉換函數
ORA-12899: value too large字符串超過列定義長度擴大列長度、或 SUBSTR 截取
日期格式錯誤NLS_DATE_FORMAT 不匹配控制文件指定 DATE "YYYY-MM-DD" 或導入 VARCHAR2 後 UPDATE TO_DATE
編碼亂碼文件編碼 (UTF-8/GBK) 與 NLS_LANG 不一致設置 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK (Windows) / .AL32UTF8 (Linux)