Varchar2数据类型允许systimestamp

Ash*_*til 1 oracle varchar2 oracle11g systimestamp

我有一个表的varchar2数据类型,如下所示

create table t11 (aa varchar2(100),bb varchar2(100));
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试插入systimestamp上面,则会插入值:

insert into t11 values (systimestamp,systimestamp);
commit;
Run Code Online (Sandbox Code Playgroud)

问题是Oracle允许这种转换的原因.

我正在使用Oracle 11g.

nta*_*lbs 6

您的列类型是varchar2,返回类型systimestamptimestamp.timestamp不能直接存储到varchar2列中,Oracle隐式地将timestamp值转换varchar2为init参数中指定的规则NLS_TIMESTAMP_FORMAT.

您可以阅读数据转换规则NLS_TIMESTAMP_FORMAT以获取更多详细信息.


Mou*_*diz 5

Oracle有隐式数据转换了解更多有关此处的信息NLS_DATE_FORMAT

隐式转换取决于它发生的上下文,并且在每种情况下可能无法以相同的方式工作.例如,从datetime值到VARCHAR2值的隐式转换可能会返回意外的年份,具体取决于NLS_DATE_FORMAT参数的值