「時刻有効性(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句で追加することが出来ます。
有効期限内のデータを参照すると言ったことが出来ます。
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句で追加することが出来ます。

コメント