この例では、currentデータ変更が将来行には適用されないことを示しています。次のテーブルは、ある企業の従業員と部門を記述するものとします。
CREATE MULTISET TABLE employee ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT ( eid INTEGER NOT NULL, ename VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL, bdate DATE FORMAT 'yyyy/mm/dd', job_duration PERIOD(DATE) NOT NULL AS VALIDTIME, deptid INTEGER, mid INTEGER) PRIMARY INDEX ( eid ); CREATE MULTISET TABLE dept ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT ( deptid INTEGER NOT NULL, deptname VARCHAR(100) CHARACTER SET LATIN NOT CASESPECIFIC) UNIQUE PRIMARY INDEX ( deptid );
この企業の経営者は、サポート(SUPPORT)部門の人員削減を迫られているとします。入社3か月未満の従業員は解雇しなければなりません。次の問合わせでは、就業期間が3か月未満の従業員を削除します。
CURRENT VALIDTIME DELETE employee FROM dept WHERE dept.deptname = 'SUPPORT' AND dept.deptid = employee.deptid AND BEGIN(job_duration) > CURRENT_DATE - interval '3' month;
ここで、この企業でまだ働いていない新規従業員のための従業員エントリがシステムに含まれているとします。上記のDELETE文では、このような将来の従業員は削除されません。このような従業員を現在の従業員と同時に削除する場合には、次の文を使用します。
BT; /* delete currently employees in department with less than 3 months work*/ CURRENT VALIDTIME DELETE employee FROM dept WHERE dept.deptname = 'SUPPORT' AND dept.deptid = employee.deptid AND BEGIN(job_duration) > current_date - interval '3' month; /* delete all future employees */ SEQUENCED VALIDTIME DELETE employee FROM dept WHERE dept.deptname = 'SUPPORT' AND dept.deptid = employee.deptid AND BEGIN(job_duration) > TEMPORAL_DATE; ET;
これ以外の方法として、次のSQLでも同様の操作が実現できます。
REPLACE VIEW v1 AS NONSEQUENCED VALIDTIME SELECT employee.eid, dept.deptid FROM employee, dept WHERE dept.deptname = 'SUPPORT' AND dept.deptid = employee.deptid AND BEGIN(job_duration) > CURRENT_DATE - interval '3' month AND job_duration OVERLAPS PERIOD(TEMPORAL_DATE, UNTIL_CHANGED); SEQUENCED VALIDTIME PERIOD(TEMPORAL_DATE, UNTIL_CHANGED) DELETE employee FROM v1 WHERE v1.eid = employee.eid AND v1.deptid = employee.deptid;