将DATE列的默认值设置为另一列(VARCHAR2(8)),错误ORA-00904

时间:2020-05-01 06:23:31

标签: oracle oracle12c

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

错误:

ORA-00904:“ DATE_POST”

为什么会这样?

我的Oracle版本是12c

1 个答案:

答案 0 :(得分:1)

不,那是行不通的。

但是,就像您使用12c一样,请创建一个虚拟列。例如:

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>