Отметка времени загрузки головной боли с помощью Oracle Sqlldr

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

И мой файл Ctrl: ... ... ПОЗИЦИЯ поля (1085) TIMESTAMP)

Каждая запись отклоняется с ошибкой: ORA-26041: Ошибка преобразования типа данных DATETIME/INTERVAL

1 ответ

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 будет работать, если это последнее поле в записи.

Другие вопросы по тегам