sqlldr测试数字格式

时间:2016-09-28 12:59:15

标签: numbers format sql-loader

我正在使用sqlldr使用CTL文件将数据加载到Oracle 12c中,如下所示:

OPTIONS (rows=1000, bindsize=100000, readsize=100000, silent=header,feedback)
load data
CHARACTERSET UTF8
insert into table TABLEA
fields terminated by '^' optionally enclosed by ','
trailing nullcols
(
NAME,
VOLUME "decode(:VOLUME,null,0,to_number(:VOLUME,'9999999999D999'))",
TEXT
)

当表格中定义为NUMBER(13,3)的数字字段VOLUME有不同的格式时,我遇到了困难。

ABCD^1089.830^CIQ
ABCD^1,089.830^CIQ
ABCD^1.089,830^CIQ

有没有办法使用sqlldr加载上面字段2中的所有三种格式的数字字段?

所有三个案例中表中的预期值为1089.830。

感谢。

1 个答案:

答案 0 :(得分:0)

这有点难看,但应该有效。它假设您的音量值数据始终具有3个小数点,小数符号将是句点(基于您的数字格式)。第一遍删除所有特定于区域的字符,然后第二遍将句点放在距离结尾3个位置:

...
VOLUME decimal external "regexp_replace(regexp_replace(:VOLUME, '[\.,]', ''), '([0-9]+)([0-9]{3})', '\\1.\\2')",
...

你可能不需要“十进制外部”,不用试试看。