Как заполнить поле отметки времени текущей отметкой времени с помощью Oracle Sql Loader - PullRequest
14 голосов
/ 05 августа 2009

Я читаю файл с разделителем канала с помощью 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 Loader, поэтому я очень мало знаю о том, на что он способен или не способен. Спасибо.

Ответы [ 3 ]

12 голосов
/ 05 августа 2009

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

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)"
3 голосов
/ 05 августа 2009

Я принял ответ Р.К., потому что в конечном итоге он ответил на то, что я спрашивал, но мое незнакомство с некоторыми инструментами 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
0 голосов
/ 26 ноября 2014

В Sql Developer запустите: ALTER SESSION SET NLS_DATE_FORMAT = 'ГГГГ-ММ-ДД ЧЧ24: MI: SS'

, а затем проверьте это с ВЫБЕРИТЕ SYSDATE ИЗ ДВОЙНОГО

...