数字格式的 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",不用时试试看。
我正在使用 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",不用时试试看。