Отметка времени загрузки головной боли с помощью 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 будет работать, если это последнее поле в записи.