Oracle 使用另一列设置日期列默认值(VARCHAR2(8)),错误ora-00904

Oracle 使用另一列设置日期列默认值(VARCHAR2(8)),错误ora-00904,oracle,oracle12c,Oracle,Oracle12c,错误: ORA-00904:发布日期 为什么会发生这种情况 我的Oracle版本是12c不,那不行 但是,在12c上,创建一个虚拟列。例如: create table T_XXX ( DATE_POST VARCHAR2(8) NOT NULL, DATE_GET DATE DEFAULT TO_DATE(SUBSTR("DATE_POST",1,8),'YYYYMMDD') ); 不客气。因为你们不能在DEFAULT子句中引用另一列。我可以问你们为什么要这样做吗?为什么要在dat

错误:

ORA-00904:发布日期

为什么会发生这种情况


我的Oracle版本是12c

不,那不行

但是,在12c上,创建一个虚拟列。例如:

create table T_XXX
(
   DATE_POST VARCHAR2(8) NOT NULL,
   DATE_GET DATE DEFAULT TO_DATE(SUBSTR("DATE_POST",1,8),'YYYYMMDD')
);

不客气。因为你们不能在DEFAULT子句中引用另一列。我可以问你们为什么要这样做吗?为什么要在date和VARCHAR2列中同时保留日期?把它放在日期栏就行了。如果您想以给定的字符串格式查看它,只需在运行时对其应用to_字符。
SQL> alter session set nls_Date_format = 'dd.mm.yyyy';

Session altered.

SQL> create table test
  2    (date_post varchar2(8),
  3     date_get  date generated always as (to_date(date_post, 'yyyymmdd'))
  4    );

Table created.

SQL> insert into test (date_post) values ('20200501');

1 row created.

SQL> select * From test;

DATE_POS DATE_GET
-------- ----------
20200501 01.05.2020

SQL>