2016-09-28 7 views
0

Я загрузки данных в Oracle 12c с помощью SQLLDR с использованием CTL файла, как показано ниже:тест SQLLDR для номера формата

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) поставляется в разных форматах.

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

Есть ли способ загрузить все три формата числового поля в поле 2 выше, используя sqlldr?

Ожидаемое значение в таблице - 1089,830 для всех трех случаев.

Спасибо.

ответ

0

Это немного уродливое, но оно должно работать. Предполагается, что данные вашего значения объема всегда будут иметь 3 десятичных точки, а десятичный символ будет периодом (в зависимости от вашего формата номера). Первый проход удаляет все специфичные для региона символов, то второй проход ставит период в 3 местах с конца:

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

Вам не нужны «Десятичной внешним», попробуйте без и посмотреть.

+0

Спасибо, это было полезно. – ppatkar

Смежные вопросы