Oracle SQL Loader加载日期遇Ora-01840错误求助
解决SQL Loader Ora-01840 日期格式不匹配问题
错误原因
CSV文件中第二行的时间字段用分号;分隔小时与分钟(08/11/2023 22;30:45),但CTL文件指定的日期格式是mm/dd/yyyy hh:mm:ss,要求小时与分钟间必须用冒号:分隔。SQL Loader无法正确解析该格式,触发Ora-01840 input value not long enough for date format错误。另外CSV包含表头行,原CTL未设置跳过表头,第一行的R_date字符串也会被当作日期解析,同样会引发同类错误。
解决方案
提供两种可行方案,按需选择:
方案1:修正CSV文件格式
- 将CSV第二行的
08/11/2023 22;30:45修改为08/11/2023 22:30:45,统一时间分隔符为冒号; - 给CTL文件添加
skip 1指令跳过表头行,修改后的CTL内容如下:
Load data Append Into table abc Fields terminated by ',' optionally enclosed by '"' skip 1 -- 跳过CSV表头行 Trailing nullcols ( R_date date 'mm/dd/yyyy hh:mm:ss' )
方案2:修改CTL文件兼容分号格式
无需修改CSV,通过replace函数替换时间中的分号后再转换日期,同时添加skip 1跳过表头,修改后的CTL内容如下:
Load data Append Into table abc Fields terminated by ',' optionally enclosed by '"' skip 1 -- 跳过CSV表头行 Trailing nullcols ( R_date "to_date(replace(:R_date, ';', ':'), 'mm/dd/yyyy hh:mm:ss')" )
内容的提问来源于stack exchange,提问作者user3873251
相关产品推荐
相关产品推荐

