SQL Loader导入CSV时控制文件NUMBER类型字段数据异常求助
SQL*Loader数值转换异常解决办法
根因定位
问题核心为控制文件中ORDER_QUANTITY字段的类型声明错误:SQL*Loader中声明的INTEGER (8)属于二进制整数类型,仅适用于导入二进制格式存储的数值。而你的CSV文件是纯文本格式存储的数字,用该类型解析时会按字节规则转换二进制内容,最终得到和原始值完全不符的异常数值。
修复方案
直接将控制文件中ORDER_QUANTITY的类型改为文本型数值声明即可,常用两种写法:
- 显式声明为外部整数(适配文本格式的整数内容,自动转换为数据库对应数值类型)
OPTIONS (SKIP=1) LOAD DATA INFILE '/opt/home/myuser/username/Myfile.csv' INTO TABLE TempArt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( ARTICLE_NUMBER, ORDER_SIZE, ORDER_QUANTITY INTEGER EXTERNAL(8) )
- 若字段可能包含小数,或需要更宽松的文本适配,可直接声明为CHAR类型,数据库会自动完成隐式类型转换:
ORDER_QUANTITY CHAR(8)
验证
修改控制文件后重新执行导入任务,执行SELECT * FROM TempArt查询即可得到和CSV文件完全一致的数值。
内容的提问来源于stack exchange,提问作者Vasu Parvatham
相关产品推荐
相关产品推荐

