目的
ANSI二重テンポラル テーブルの1つ以上の行を削除します。valid-time期間の一部の期間に限って行を削除することができます。
構文
二重テンポラル テーブルの行を削除するための構文は、DELETE (ANSI Valid-Timeテーブル フォーム)に示されている、valid-timeテーブルに使用される構文と同じです。
DELETEの例
例: ANSI二重テンポラル テーブルに対する単純なDELETE
ここに示す例では、次のANSI二重テンポラル テーブルを使用します。
eid ename deptno terms job_start job_end sys_start sys_end ---- ----- ------ ----- ---------- ---------- -------------------------------- -------------------------------- 1002 Ash 333 TA05 2003/01/01 2003/12/31 2003-12-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1005 Alice 222 TW10 2004/12/01 9999/12/31 2004-12-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00 1010 Mike 444 TW07 2015/01/01 2016/12/31 2004-12-01 00:12:23.120000-08:00 9999-12-31 23:59:59.999999+00:00 1001 Sania 111 TW08 2002/01/01 2006/12/31 2002-01-01 00:00:00.000000-08:00 2002-07-01 12:00:00.350000+00:00 1004 Fred 222 PW12 2001/05/01 9999/12/31 2001-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00 1003 SRK 111 TM02 2004/02/10 2005/02/10 2004-02-10 00:00:00.000000-08:00 2004-12-01 00:12:23.120000+00:00
単純なSELECTは、テーブルから論理的に削除されなかったオープン行を表示します。これらの行のみが削除対象になります。
SELECT * FROM employee_bitemp; eid ename deptno terms job_start job_end sys_start sys_end ---- ----- ------ ----- ---------- ---------- -------------------------------- -------------------------------- 1002 Ash 333 TA05 2003/01/01 2003/12/31 2003-12-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1005 Alice 222 TW10 2004/12/01 9999/12/31 2004-12-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00 1010 Mike 444 TW07 2015/01/01 2016/12/31 2004-12-01 00:12:23.120000-08:00 9999-12-31 23:59:59.999999+00:00 1004 Fred 222 PW12 2001/05/01 9999/12/31 2001-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
テンポラル修飾が設定されていない単純なDELETEは、システム時間内に行を論理的に削除(クローズ)します。非テンポラル問合わせを使用した場合、行はテーブルに表示されなくなります。
DELETE FROM employee_bitemp WHERE ename='Ash'; SELECT * FROM employee_bitemp; eid ename deptno terms job_start job_end sys_start sys_end ---- ----- ------ ----- ---------- ---------- -------------------------------- -------------------------------- 1005 Alice 222 TW10 2004/12/01 9999/12/31 2004-12-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00 1010 Mike 444 TW07 2015/01/01 2016/12/31 2004-12-01 00:12:23.120000-08:00 9999-12-31 23:59:59.999999+00:00 1004 Fred 222 PW12 2001/05/01 9999/12/31 2001-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
テンポラル問合わせを使用すると、行がクローズ行としてテーブルに残っていることがわかります。行の削除時間を示すシステム時間の終了境界を除いて、行内のどの値も変更されていません。
eid ename deptno terms job_start job_end sys_start sys_end
---- ----- ------ ----- ---------- ---------- -------------------------------- ---------------------------------
1002 Ash 333 TA05 2003/01/01 2003/12/31 2003-12-01 12:11:00.000000-08:00 2014-02-28 19:40:51.250000-08:00
1005 Alice 222 TW10 2004/12/01 9999/12/31 2004-12-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00
1010 Mike 444 TW07 2015/01/01 2016/12/31 2004-12-01 00:12:23.120000-08:00 9999-12-31 23:59:59.999999+00:00
1001 Sania 111 TW08 2002/01/01 2006/12/31 2002-01-01 00:00:00.000000-08:00 2002-07-01 12:00:00.350000+00:00
1004 Fred 222 PW12 2001/05/01 9999/12/31 2001-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
1003 SRK 111 TM02 2004/02/10 2005/02/10 2004-02-10 00:00:00.000000-08:00 2004-12-01 00:12:23.120000+00:00
例: ANSI二重テンポラル テーブルに対するvalid-timeのDELETE
DELETE FROM employee_bitemp FOR PORTION OF job_dur FROM DATE’2009-01-01’ TO DATE’2010-01-01’ WHERE ename=’Fred’; eid ename deptno terms job_start job_end sys_start sys_end ---- ----- ------ ----- ---------- ---------- -------------------------------- -------------------------------- 1002 Ash 333 TA05 2003/01/01 2003/12/31 2003-12-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1005 Alice 222 TW10 2004/12/01 9999/12/31 2004-12-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00 1010 Mike 444 TW07 2015/01/01 2016/12/31 2004-12-01 00:12:23.120000-08:00 9999-12-31 23:59:59.999999+00:00 1004 Fred 222 PW12 2001/05/01 9999/12/31 2001-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
DELETE文のPAは関連行のPV内に収まっていたため、valid-timeテーブルに削除を実行した場合と同じように2つの行が作成されます。
SELECT * FROM employee_bitemp; eid ename deptno terms job_start job_end sys_start sys_end ---- ----- ------ ----- ---------- ---------- -------------------------------- -------------------------------- 1002 Ash 333 TA05 2003/01/01 2003/12/31 2003-12-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 1005 Alice 222 TW10 2004/12/01 9999/12/31 2004-12-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00 1010 Mike 444 TW07 2015/01/01 2016/12/31 2004-12-01 00:12:23.120000-08:00 9999-12-31 23:59:59.999999+00:00 1004 Fred 222 PW12 2001/05/01 2009/01/01 2014-02-28 21:06:33.460000-08:00 9999-12-31 23:59:59.999999+00:00 1004 Fred 222 PW12 2010/01/01 9999/12/31 2014-02-28 21:06:33.460000-08:00 9999-12-31 23:59:59.999999+00:00
システム時間内では、これらの行は両方ともテーブルに追加された新しい行とみなされます。これは、sys_start値に、Fred行の有効時間の中央部を除いた期間が示されていることからわかります。「部分」削除の結果、システム時間内にテーブルに対して行なわれたすべての変更を表示するには、オープン行とクローズ行を含むすべての行を表示するテンポラル問合わせを使用します。
SELECT * FROM employee_bitemp
FOR SYSTEM_TIME BETWEEN TIMESTAMP'1900-01-01 00:00:00.000000+00:00' AND CURRENT_TIMESTAMP;
eid ename deptno terms job_start job_end sys_start sys_end
---- ----- ------ ----- ---------- ---------- -------------------------------- --------------------------------
1002 Ash 333 TA05 2003/01/01 2003/12/31 2003-12-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00
1005 Alice 222 TW10 2004/12/01 9999/12/31 2004-12-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00
1010 Mike 444 TW07 2015/01/01 2016/12/31 2004-12-01 00:12:23.120000-08:00 9999-12-31 23:59:59.999999+00:00
1001 Sania 111 TW08 2002/01/01 2006/12/31 2002-01-01 00:00:00.000000-08:00 2002-07-01 12:00:00.350000+00:00
1004 Fred 222 PW12 2001/05/01 9999/12/31 2001-05-01 12:00:00.350000-08:00 2014-02-28 21:06:33.460000-08:00
1004 Fred 222 PW12 2001/05/01 2009/01/01 2014-02-28 21:06:33.460000-08:00 9999-12-31 23:59:59.999999+00:00
1004 Fred 222 PW12 2010/01/01 9999/12/31 2014-02-28 21:06:33.460000-08:00 9999-12-31 23:59:59.999999+00:00
1003 SRK 111 TM02 2004/02/10 2005/02/10 2004-02-10 00:00:00.000000-08:00 2004-12-01 00:12:23.120000+00:00
これで、テーブルには3つの物理的なFred行が実際に表示されました。追加された新しい2つの行では、Fredの時間が削除の前後に設定されています。テーブルから論理的に削除された元のFred行では、sys_end値に変更時間が示されています。削除された行のvalid-time境界は、削除前の元のFred行のvalid-time境界と同じです。