「時刻有効性(Tmporal Validity)」という機能を利用することによってデータの有効期限をテーブルに付与することが出来ます。
有効期限内のデータを参照すると言ったことが出来ます。

CREATE TABLE emp3
(empno NUMBER(4),
 ename VARCHAR2(10),
PERIOD FOR user_time);

テーブル作成時にPERIOD_FOR句で有効期限列を指定します。

SQL> desc emp3
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                              NUMBER(4)
 ENAME                                              VARCHAR2(10)


descには有効期限列は表示されません。

SQL> column DATA_TYPE format a30
SQL> column COLUMN_NAME format a20
SQL> SELECT column_name, hidden_column, virtual_column, data_type
  2  FROM user_tab_cols WHERE table_name='EMP3';

COLUMN_NAME          HID VIR DATA_TYPE
-------------------- --- --- ------------------------------
USER_TIME_END        YES NO  TIMESTAMP(6) WITH TIME ZONE
USER_TIME_START      YES NO  TIMESTAMP(6) WITH TIME ZONE
USER_TIME            YES YES NUMBER
ENAME                NO  NO  VARCHAR2
EMPNO                NO  NO  NUMBER


xxx_tab_colsビューを参照すると有効期限列のstartとend列が追加されていることがわかります。

SQL> INSERT INTO emp3(empno,ename,user_time_start,user_time_end)
  2  VALUES(100,'SCOTT',TO_TIMESTAMP('2000-10-01','YYYY-MM-DD'),NULL);

1行が作成されました。

INSERT INTO emp3(empno,ename,user_time_start,user_time_end)
VALUES(200,'KING',TO_TIMESTAMP('2002-04-01','YYYY-MM-DD'),
TO_TIMESTAMP('2010-03-31','YYYY-MM-DD'));

1行が作成されました。


上記、有効期限列に日付データを挿入することが出来ます。

SQL> SELECT * FROM emp3;

     EMPNO ENAME
---------- ----------
       100 SCOTT
       200 KING

SELECT句では有効期限列は非表示です。

ALTER TABLE emp3 ADD (PERIOD FOR promo_time);

SQL> SELECT column_name, hidden_column, virtual_column, data_type
  2  FROM user_tab_cols WHERE table_name='EMP3';

COLUMN_NAME          HID VIR DATA_TYPE
-------------------- --- --- ------------------------------
USER_TIME_END        YES NO  TIMESTAMP(6) WITH TIME ZONE
USER_TIME_START      YES NO  TIMESTAMP(6) WITH TIME ZONE
USER_TIME            YES YES NUMBER
PROMO_TIME           YES YES NUMBER
PROMO_TIME_END       YES NO  TIMESTAMP(6) WITH TIME ZONE
PROMO_TIME_START     YES NO  TIMESTAMP(6) WITH TIME ZONE
ENAME                NO  NO  VARCHAR2
EMPNO                NO  NO  NUMBER

8行が選択されました。


有効期限列はALTER句で追加することが出来ます。