目的
valid-time期間の一部のみの行を削除するオプションにより、valid-timeテーブルから1つ以上の行を削除します。
構文
DELETE FROM valid_time_table [ FOR PORTION OF valid_time_period_name FROM point_in_time_1 TO point_in_time_2 ] [ WHERE search_condition ] [;]
- valid_time_table
- 行を削除するvalid-timeテーブル。
- FOR PORTION OF
- point_in_time_1とpoint_in_time_2で定義される期間内またはこれらの期間と重なるvalid-time期間を持つ削除対象の行を修飾します。
- valid_time_period_name
- valid-time派生期間列の名前。これは、「VALIDTIME」ではありません。テーブルが定義されたときに派生期間列に割り当てられた名前です。
- point_in_time_1
- point_in_time_2
- 削除の適用期間を区切ります。
日付またはタイムスタンプ式(DATEまたはTIMESTAMP[(n)] [WITH TIME ZONE]値で評価される定数、スカラーUDF、スカラー副問合わせ、またはビジネス カレンダ関数など)。
この式は、パラメータ化された値およびCURRENT_DATE、CURRENT_TIMESTAMP、TEMPORAL_DATE、またはTEMPORAL TIMESTAMPなどのビルトイン関数を含めた任意の式にすることができます。この式は列を参照することはできませんが、自己格納型の非相関スカラー副問合わせにすることができます。
- WHERE search_condition
- この構文およびその他の非テンポラルのキーワード、句およびDELETEのオプションの詳細については、Teradata Vantage™ - SQLデータ操作言語、B035-1146を参照してください。
ANSI準拠
この文は、ANSI SQL:2011に準拠しています。
使用上の注意
MERGE INTO文ではFOR PORTION OF修飾子を使用できません。
Valid-Timeテーブルからの行の削除の例
以下の例では、現在、将来、および履歴行の混合を含むemployee_vtという名前の次のvalid-timeテーブルに対して問合わせが実行されると仮定しています。
eid ename terms job_start job_end ---- ----- ----- ----------- ----------- 1002 Ash TA05 2003/01/01 2003/12/31 1005 Alice TW11 2004/12/01 2005/12/01 1010 Mike TW07 2015/01/01 2016/12/31 1005 Alice PW11 2005/12/01 9999/12/31 1001 Sania TW08 2002/01/01 2006/12/31 1004 Fred PW12 2001/05/01 9999/12/31 1003 SRK TM02 2004/02/10 2005/02/09
例: ANSI Valid-Timeテーブルでの簡単なDELETE
テンポラル修飾のない簡単なDELETE文は、非テンポラル テーブルのDELETEと同じように動作し、削除対象の行を完全に削除します。
DELETE FROM employee_vt WHERE ename=’Ash’; SELECT * FROM employee_vt; eid ename terms job_start job_end ---- ----- ----- ----------- ----------- 1005 Alice TW11 2004/12/01 2005/12/01 1010 Mike TW07 2015/01/01 2016/12/31 1005 Alice PW11 2005/12/01 9999/12/31 1001 Sania TW08 2002/01/01 2006/12/31 1004 Fred PW12 2001/05/01 9999/12/31 1003 SRK TM02 2004/02/10 2005/02/09
例: 削除のPAが行のPV内にあるANSI Valid-Timeテーブルからの削除
テンポラル テーブルを使用して、有効期間の一部の行のみを「削除」できます。データベースは、自動的な変更を行なうために、行の追加およびvalid-time期間の調整を行ないます。データベースは、期間の境界の変更およびテーブルへの新しい行の追加を含む、行のvalid-timeの変更を自動的に処理します。
例えば、会社が2009年にFredに1年間の休暇を認めると仮定します。行の有効期間のその部分だけ、Fredの行を削除すると、テーブルではFredに次の2つの行が自動的に作成されます。
DELETE FROM employee_vt FOR PORTION OF job_dur FROM DATE’2009-01-01’ TO DATE’2010-01-01’ WHERE ename=’Fred’; SELECT * FROM employee_vt WHERE ename=’Fred’; eid ename terms job_start job_end ---- ----- ----- ---------- ----------- 1004 Fred PW12 2001/05/01 2009/01/01 1004 Fred PW12 2010/01/01 9999/12/31
例: 削除のPAが行のPVと重なるANSI Valid-Timeテーブルからの削除
削除のPVが行のPAと重なる場合、重複が削除される間の行情報の部分だけが、行の有効に変化するvalid-time期間になります。
DELETE FROM employee_vt FOR PORTION OF job_dur FROM DATE’2000-01-01’ TO DATE’2002-01-01’ WHERE ename=’Fred’; SELECT * FROM employee_vt WHERE ename=’Fred’; eid ename terms job_start job_end ---- ----- ----- ---------- ----------- 1004 Fred PW12 2002/02/01 2009/01/01 1004 Fred PW12 2010/01/01 9999/12/31 DELETE FROM employee_vt FOR PORTION OF job_dur FROM DATE’2008-05-05’ TO DATE’2009-05-05’ WHERE ename=’Fred’; SELECT * FROM employee_vt WHERE ename=’Fred’; eid ename terms job_start job_end ---- ----- ----- ---------- ----------- 1004 Fred PW12 2002/01/01 2008/05/05 1004 Fred PW12 2009/05/01 9999/12/31