'01-JAN-1901'
не является отметкой времени, это строка.
Не вставляйте строку; используйте литерал даты (он будет приведен к метке времени):
Insert into GTT_A values (DATE '1901-01-01');
или литерал метки времени, если вы хотите включить компонент времени:
Insert into GTT_A values (TIMESTAMP '1901-01-01 00:00:00');
Или, если вы хотите используйте строку, затем используйте TO_DATE
с моделью формата для явного преобразования строки в дату:
Insert into GTT_A values (
TO_DATE(
'01-JAN-1901',
'DD-MON-YYYY',
'NLS_DATE_LANGUAGE=AMERICAN'
)
);
или TO_TIMESTAMP
:
Insert into GTT_A values (
TO_TIMESTAMP(
'01-JAN-1901',
'DD-MON-YYYY',
'NLS_DATE_LANGUAGE=AMERICAN'
)
);
Если вы полагаетесь на неявный Затем Oracle попытается неявно преобразовать вашу строку в дату, а ваш запрос:
Insert into GTT_A values ('01-JAN-1901');
будет эффективно преобразован в:
Insert into GTT_A values (
TO_TIMESTAMP(
'01-JAN-1901',
( SELECT value
FROM NLS_SESSION_PARAMETERS
WHERE parameter = 'NLS_TIMESTAMP_FORMAT' )
)
);
Каждый пользователь может установить свои собственные параметры сеанса. в ЛЮБОЕ раз, чтобы ваш запрос мог работать одну минуту, а затем пользователь обновляет свои параметры сеанса, и ваш запрос перестает работать без изменения вашего запроса. Не полагайтесь на неявные преобразования; сделайте так, чтобы вам ничего не нужно было конвертировать с использованием литерала даты / времени или использования явного преобразования.