数字格式的 sqlldr 测试

sqlldr test for number format

我正在使用 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
)

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

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

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

对于所有三种情况,table 中的预期值为 1089.830。

谢谢。

这有点难看,但应该可以。它假定您的体积值数据将始终有 3 个小数点,并且小数点符号将是一个句点(基于您的数字格式)。第一遍删除所有特定于区域的字符,然后第二遍将句点放在末尾的 3 个位置:

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

您可能不需要 "decimal external",不用时试试看。