You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL*Loader加载CSV到Oracle表列映射错误及ORA-01460转换失败求助

问题排查与解决方案

核心问题定位

列映射顺序不匹配是根源——CSV的字段被错误映射到Oracle表的列,导致FTE数值列收到了非数值型数据,触发ORA-01460转换错误,最终所有记录加载失败。

针对性排查步骤

  • 核对控制文件列顺序:
    检查SQL*Loader控制文件中FIELDS块的列定义顺序,必须和CSV文件的列顺序完全一致。比如CSV列是EMP_ID,NAME,FTE,DEPT,但控制文件写成EMP_ID,FTE,NAME,DEPT,就会把NAME的字符串塞到FTE列,直接触发转换错误。
  • 验证分隔符一致性:
    确认控制文件TERMINATED BY指定的分隔符(比如逗号',')和CSV实际使用的分隔符完全匹配,包括是否有隐藏的空格、制表符。如果CSV用分号但控制文件写逗号,整行数据会被识别为单个字段,映射彻底混乱。
  • 检查CSV表头处理:
    如果CSV包含表头行,控制文件必须用SKIP 1跳过表头。没加这行的话,表头的字符串(比如"FTE")会被当作第一行数据加载,直接触发FTE列的转换错误。
  • 分析错误日志细节:
    从SQL*Loader错误日志里找到失败记录的原始数据片段,对比表结构就能直观看到哪列数据被错放到了FTE列。比如日志显示FTE列收到"Marketing",说明DEPT的数据被错映射到了FTE位置。

修复方案示例

假设Oracle表结构:

CREATE TABLE EMPLOYEES (
    EMP_ID NUMBER(10) PRIMARY KEY,
    NAME VARCHAR2(50),
    FTE NUMBER(3,2),
    DEPT VARCHAR2(30)
);

CSV文件内容(带表头):

EMP_ID,NAME,FTE,DEPT
1001,John Doe,1.0,Engineering
1002,Jane Smith,0.5,Marketing

正确的SQL*Loader控制文件(load_emp.ctl):

LOAD DATA
INFILE 'employees.csv'
BADFILE 'employees.bad'
DISCARDFILE 'employees.dsc'
APPEND
INTO TABLE EMPLOYEES
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
SKIP 1  -- 跳过表头行
(
    EMP_ID,
    NAME,
    FTE,
    DEPT
)

Shell调用脚本示例:

sqlldr username/password@database control=load_emp.ctl log=load_emp.log

修复验证

重新执行加载后,确认:

  • 日志文件中rows successfully loaded数量符合预期
  • BAD文件为空(无错误记录)
  • 直接查询Oracle表,确认各列数据映射正确,FTE列数值正常

内容的提问来源于stack exchange,提问作者aditya442

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:09:52