目的
system-timeテーブルから1つ以上の行を削除します。
構文
system-timeテーブルで使用するときにDELETE文に特別な追加のテンポラル構文はありません。この構文は、非テンポラル テーブルに使用される構文と同一です。この構文については、Teradata Vantage™ - SQLデータ操作言語、B035-1146で詳しく説明しています。
ANSI準拠
この文は、ANSI SQL:2011に準拠しています。
使用上の注意
- DELETE文の構文はsystem-timeテーブルでも非テンポラル テーブルでも同じですが、効果は異なります。DELETEの結果として、system-timeテーブルから行が物理的に削除されることはないからです。
- 行は、通常、system-timeテーブルから物理的に削除されることはないため、これらのテーブルに必要なストレージ容量は、行が削除されても減りません。クローズした行をsystem-timeテーブルから物理的に削除するには、テーブルからシステムのバージョン情報を削除します。これにより、クローズした行がすべてテーブルから自動的に削除されます。
削除する前にクローズした行をアーカイブするために、INSERT ... SELECT操作でクローズした行を新しいテーブルにコピーして、その後、新しいテーブルをアーカイブすることができます。
例: ANSI System-Timeテーブルからの行の削除
次の例では、employee_systimeという名前の次のシステムのバージョン情報を含むsystem-timeテーブルにDELETE操作が適用されると仮定しています。
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
クローズした行はすでにテーブルから削除されているため、さらに削除する対象とはなりません。削除できるのは、system-timeテーブルのオープン行だけです。オープン行は、現在修飾されていない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 1005 Alice 555 2005-05-01 12:00:00.450000-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 1001 Sania 111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00 DELETE FROM employee_systime WHERE ename=’Sania’;
簡単な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 1005 Alice 555 2005-05-01 12:00:00.450000-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
テーブル内のすべてのオープンおよびクローズ行を示すテンポラル問合わせにより、Sania行が論理的に削除されただけで、テーブル内でクローズ行として無効のまま残っていることがわかります。
SELECT * FROM employee_systime FOR SYSTEM_TIME FROM TIMESTAMP'1900-01-01 00:00:00.000001-08:00' TO CURRENT_TIMESTAMP; 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 2014-02-22 22:32:01.540000-08: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
このようにして、system-timeテーブルはテーブル内の行削除の詳細な履歴を維持します。