使用 Inteval 数据类型存储计算结果

kin*_*jou 4 oracle-11g-r2 oracle-10g

我想创建一个表,它具有hiredate 以及hiredate 和sysdate 的间隔。如何创建一个自动存储计算的列。

Mat*_*Mat 7

我不相信你可以。

用于创建虚拟列的表达式必须是确定性的,即在使用相同参数调用时始终返回相同的值。涉及当前日期从根本上不符合该要求。

不过,您可以使用普通的旧视图。

create table mytab (hiredate date);
create view myview
as
 select
   hiredate,
   numtodsinterval(sysdate-hiredate, 'day') delta
 from mytab;

insert into mytab values (to_date('20120101', 'YYYYMMDD'));
commit;
select * from myview;
Run Code Online (Sandbox Code Playgroud)

输出:

HIREDATE        DELTA
01/01/12    247 9:15:55.0
Run Code Online (Sandbox Code Playgroud)