Тип данных Varchar2 позволяет использовать системную метку

У меня есть одна таблица с типами данных varchar2, как показано ниже.

create table t11 (aa varchar2(100),bb varchar2(100));

Теперь, если я пытаюсь вставить systimestamp выше, значения вставляются:

insert into t11 values (systimestamp,systimestamp);
commit;

Вопрос в том, почему это преобразование разрешено в Oracle.

Я использую Oracle 11g.


person Ashish Patil    schedule 30.09.2015    source источник


Ответы (2)


Ваш тип столбца — varchar2, а возвращаемый тип systimestamptimestamp. timestamp нельзя хранить непосредственно в столбце varchar2, Oracle неявно преобразует значение timestamp в varchar2 с помощью правила, указанного в параметре инициализации, NLS_TIMESTAMP_FORMAT.

Вы можете прочитать Правила преобразования данных и NLS_TIMESTAMP_FORMAT для более подробной информации.

person ntalbs    schedule 30.09.2015

У Oracle есть неявное преобразование данных, Подробнее об этом, которое зависит от NLS_DATE_FORMAT

Неявное преобразование зависит от контекста, в котором оно происходит, и может работать по-разному в каждом случае. Например, неявное преобразование значения даты и времени в значение VARCHAR2 может вернуть неожиданный год в зависимости от значения параметра NLS_DATE_FORMAT.

person Moudiz    schedule 30.09.2015