2014-09-23 5 views
0

Привет, Все, у меня возникла проблема с загрузкой файла со значениями timestamp с помощью sqlldr, может ли кто-нибудь помочь с идеей? Это то, что строка моего файла для загрузки с отметкой времени выглядит так: ..... 2014-09-02-00.00.00.Временная метка загрузки головной боли с Oracle Sqlldr

И мой файл Ctrl: ... ... поле POSITION (1085) TIMESTAMP)

Каждая запись отвергается с ошибкой: ORA-26041: DATETIME/ИНТЕРВАЛ тип данных ошибки преобразования

ответ

2

SQL * Loader будет пытаться интерпретировать строку как метку времени, используя свой стандартный NLS параметры сеанса, который по умолчанию будет что-то вроде:

select value from nls_session_parameters where parameter = 'NLS_TIMESTAMP_FORMAT'; 

VALUE 
-------------------------------------------------------------------------------- 
DD-MON-RR HH24.MI.SSXFF 

... хотя ваш, кажется, что-то еще, поскольку этот параметр дает ORA-01843: недействительный месяц 'с примерной строкой. Файл журнала от нагрузки также будет показывать формат он пытался применить:

Column Name     Position Len Term Encl Datatype 
------------------------------ ---------- ----- ---- ---- --------------------- 
"<field>"       1085  * ,  DATETIME DD-MON-RR HH24.MI.SSXFF 

Независимо от формата по умолчанию, это, кажется, не соответствует формату в файле. Вы можете изменить формат базы данных или триггера входа в систему, но это не будет полезно, если у вас есть другие источники или выходы, которые ожидают существующий формат; и вы не должны полагаться на настройки NLS, так как они могут быть разными в другой среде.

Вы можете указать формат временной метки в части определения поля:

... Field POSITION(1085) TIMESTAMP "YYYY-MM-DD-HH24.MI.SS") 

Если столбец timestamp with time zone - предложил теги, но не вопрос - тогда он будет вставлен в часовом поясе сеанса.

Чаще всего указывается диапазон позиций, хотя при условии, что начальное положение 1085 будет работать, если это последнее поле в записи.