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

使用控制文件加载CSV至Oracle表时遇ORA-01841日期错误求助

解决SQL*Loader加载Oracle表时的ORA-01841日期错误

错误原因

ORA-01841报错说明第10001条记录的DATE字段值无法通过TO_DATE(:DATE,'DD-MM-YYYY')完成转换,核心问题包括:

  • 日期值实际格式与控制文件中指定的DD-MM-YYYY不匹配(比如用了/分隔符、月日顺序颠倒)
  • 日期值为空、包含乱码或年份超出-4713到9999的有效范围
  • DATE是Oracle保留关键字,作为列名可能引发解析异常

解决方案

1. 定位并修正无效记录

直接打开CSV文件找到第10001条记录,检查DATE字段:

  • 若分隔符错误(比如用/代替-),将控制文件的格式掩码改为'DD/MM/YYYY'
  • 若月日顺序颠倒(比如是MM-DD-YYYY格式),调整掩码为对应格式
  • 若为空值、乱码或年份无效,直接修正CSV中的这条数据

2. 处理关键字列名问题

DATE是Oracle保留关键字,作为列名易引发解析问题,两种解决方式:

  • 优先修改表的列名(比如改为LOAD_DATE)
  • 若无法改表名,在控制文件中给列名加双引号,同时确保转换逻辑对应:
    "DATE" "TO_DATE(trim(:DATE),'DD-MM-YYYY')"
    

3. 添加转换容错机制

如果CSV中存在少量无效日期,不想整行被拒绝,可通过VALIDATE_CONVERSION函数过滤无效值(需表的DATE列允许NULL):

"DATE" "CASE WHEN VALIDATE_CONVERSION(:DATE AS DATE, 'DD-MM-YYYY') = 1 THEN TO_DATE(trim(:DATE),'DD-MM-YYYY') ELSE NULL END"

4. 用日志精准排查问题

在控制文件中添加日志配置,生成的loader.bad文件会保存被拒绝的原始记录,方便快速定位:

LOAD DATA
        REPLACE
        INTO TABLE Tab_A
        Fields terminated by "," OPTIONALLY ENCLOSED BY '"'
        TRAILING NULLCOLS
        LOG 'loader.log'
        BAD 'loader.bad'
        (
        ITEM "trim(:ITEM)",
        LOC "trim(:LOC)",
        "DATE" "TO_DATE(trim(:DATE),'DD-MM-YYYY')",
        DUR,
        QTY
        )

验证步骤

修改后重新执行加载命令,查看日志确认错误消除,再查询Tab_A表验证数据是否正确导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:50:22