我有一个包含varchar2数据类型的表,如下所示
create table t11 (aa varchar2(100),bb varchar2(100));
现在,如果我尝试在上面插入systimestamp
,则会插入值:
insert into t11 values (systimestamp,systimestamp);
commit;
问题是为什么在Oracle中允许这种转换。
我正在使用Oracle 11g。
答案 0 :(得分:6)
您的列类型为varchar2
,返回类型systimestamp
为timestamp
。 timestamp
无法直接存储到varchar2
列,Oracle会使用init参数timestamp
中指定的规则将varchar2
值隐式转换为NLS_TIMESTAMP_FORMAT
。< / p>
您可以阅读Data Conversion Rules和NLS_TIMESTAMP_FORMAT了解更多详情。
答案 1 :(得分:5)
Oracle具有依赖于attributedTitle
隐式转换取决于它发生的上下文和可能 在每种情况下都不会以相同的方式工作。例如,隐式转换 从datetime值到VARCHAR2值可能会返回意外的值 年份取决于NLS_DATE_FORMAT参数的值