以下の例では、オープン行とクローズ行の混合を含むemployee_systimeという名前の次のシステムのバージョン情報を含むsystem-timeテーブルに対して問合わせが実行されると仮定しています。
eid ename deptno sys_start sys_end ---- ------ ------ -------------------------------- -------------------------------- 1002 Ash 333 2003-07-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1005 Alice 222 2004-12-01 00:12:23.120000-08:00 2005-05-01 12:00:00.450000-08:00 1004 Fred 222 2002-07-01 12:00:00.350000-08:00 2005-05-01 12:00:00.350000-08:00 1001 Sania 111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1003 SRK 111 2004-02-10 00:00:00.000000-08:00 2006-03-01 00:00:00.000000-08:00 1004 Fred 555 2005-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00 1005 Alice 555 2005-05-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00
システム時間のあるテーブルで、UPDATEの対象になるのは、オープン行だけです。テンポラル修飾子のない簡単なSELECTでテーブルのオープン行が返されます。
SELECT * FROM employee_systime; eid ename deptno sys_start sys_end ---- ------ ------ -------------------------------- -------------------------------- 1002 Ash 333 2003-07-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1001 Sania 111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1004 Fred 555 2005-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00 1005 Alice 555 2005-05-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00 UPDATE employee_systime SET deptno=888 WHERE ename=’Ash’;
簡単なSELECTで行が予測どおりに変更されたことを示しています。system-time期間の開始時間はUPDATEの時間を記録することに注意してください。変更がデータベースに通知されて有効になるのはこの開始時間からだからです。
eid ename deptno sys_start sys_end
---- ------ ------ -------------------------------- --------------------------------
1002 Ash 888 2014-02-23 22:27:56.540000-08:00 9999-12-31 23:59:59.999999+00:00
1001 Sania 111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00
1004 Fred 555 2005-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
1005 Alice 555 2005-05-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00
オープンおよびクローズ行を示すテンポラルSELECTは、元の行がまだテーブルに存在することを示しています。元の行はクローズされており、古い行のシステム時間の終了境界は変更時に設定されています。これはその行の値がデータベースで適用されたり、有効になることを終了した時間です。
SELECT * FROM employee_systime FOR SYSTEM_TIME BETWEEN TIMESTAMP'1900-01-01 22:14:02.820000-08:00' and CURRENT_TIMESTAMP WHERE ename=’Ash’; eid ename deptno sys_start sys_end ---- ------ ------ -------------------------------- -------------------------------- 1002 Ash 888 2014-02-23 22:27:56.540000-08:00 9999-12-31 23:59:59.999999+00:00 1002 Ash 333 2003-07-01 12:11:00.000000-08:00 2014-02-23 22:27:56.540000-08:00
このようにして、system-timeテーブルはテーブルの行への変更の詳細な履歴を維持しています。