Как заполнить поле временной метки текущей меткой времени с помощью 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