Как заполнить поле временной метки текущей меткой времени с помощью Oracle Sql Loader

Я читаю файл с разделителями каналов с помощью SQL Loader и хочу заполнить поле LAST_UPDATED в таблице, которую я заполняю. Мой файл управления выглядит следующим образом:

LOAD DATA
INFILE SampleFile.dat
REPLACE
INTO TABLE contact
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
(
ID, 
FIRST_NAME,
LAST_NAME,
EMAIL,
DEPARTMENT_ID,
LAST_UPDATED SYSTIMESTAMP
)

В поле LAST_UPDATED я пробовал SYSTIMESTAMP и CURRENT_TIMESTAMP и не работал. SYSDATE работает отлично, но не дает мне времени суток.

Я новичок в загрузчике SQL, поэтому я очень мало знаю о том, что он или не способен. Спасибо.

Ответы

Ответ 1

Вы пробовали следующее:

CURRENT_TIMESTAMP [(точность)]

select current_timestamp(3) from dual;

CURRENT_TIMESTAMP(3)
-----------------------------
10-JUL-04 19.11.12.686 +01:00

Для этого в SQLLDR вам нужно будет использовать EXPRESSION в файле CTL, чтобы SQLLDR знал, как обрабатывать вызов как SQL.

Заменить:

LAST_UPDATED SYSTIMESTAMP

с:

LAST_UPDATED EXPRESSION "current_timestamp(3)"

Ответ 2

Я принял ответ RC, потому что в конечном счете он ответил на то, что я просил, но моя незнакомость с некоторыми инструментами Oracle привела меня к тому, чтобы сделать это сложнее, чем нужно.

Я пытался заставить SQL * Loader записывать временную метку вместо даты. Когда я использовал SYSDATE, а затем сделал выбор в таблице, он перечислял только дату (05-AUG-09).

Затем я попробовал RC-метод (в комментариях), и он сработал. Однако, все же, когда я сделал выбор в таблице, я получил тот же формат даты. Тогда мне пришло в голову, что это может быть просто усечение остатка для целей показа. Итак, я сделал:

select TO_CHAR(LAST_UPDATED,'MMDDYYYY:HH24:MI:SS') from contact;

И тогда он отобразил все. Затем я вернулся к файлу управления и поменял его на SYSDATE и выполнил тот же запрос и, конечно же, HH: MI: SS был там и точным.

Все это делается в SqlDeveloper. Я не знаю, почему это по умолчанию. Также меня отбросили следующие два утверждения в sqldeveloper.

SELECT CURRENT_TIMESTAMP FROM DUAL; //returns a full date and time 

SELECT SYSDATE FROM DUAL; // returns only a date

Ответ 3

В Sql Developer run: ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24: MI: SS'

а затем проверьте его с помощью SELECT SYSDATE FROM DUAL