16.20 - DELETE (ANSI Valid-Timeテーブル フォーム) - Teradata Vantage NewSQL Engine

Teradata Vantage™ ANSIテンポラル テーブル サポート

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1186-162K-JPN

目的

valid-time期間の一部のみの行を削除するオプションにより、valid-timeテーブルから1つ以上の行を削除します。

構文





valid_time_table
行を削除するvalid-timeテーブル。
FOR PORTION OF
point_in_time_1point_in_time_2で定義される期間内またはこれらの期間と重なるvalid-time期間を持つ削除対象の行を修飾します。
valid_time_period_name
valid-time派生期間列の名前。これは、「VALIDTIME」ではありません。テーブルが定義されたときに派生期間列に割り当てられた名前です。
point_in_time_1point_in_time_2
削除の適用期間を区切ります。
日付またはタイムスタンプ式(DATEまたはTIMESTAMP[(n)] [WITH TIME ZONE]値で評価される定数、スカラーUDF、スカラー副問合わせ、またはビジネス カレンダ関数など)。
この式は、パラメータ化された値およびCURRENT_DATE、CURRENT_TIMESTAMP、TEMPORAL_DATE、またはTEMPORAL TIMESTAMPなどのビルトイン関数を含めた任意の式にすることができます。この式は列を参照することはできませんが、自己格納型の非相関スカラー副問合わせにすることができます。
WHERE search_condition
この構文およびその他の非テンポラルのキーワード、句およびDELETEのオプションの詳細については、SQLデータ操作言語を参照してください。

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テーブルからの削除

テンポラル テーブルを使用して、有効期間の一部の行のみを「削除」できます。Teradata Databaseは、自動的な変更を行なうために、行の追加およびvalid-time期間の調整を行ないます。Teradata Databaseは、期間の境界の変更およびテーブルへの新しい行の追加を含む、行の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
これはDELETE操作でしたが、全体的な効果はテーブルへの行の追加でした。

例: 削除の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