目的
ALTER TABLEのテンポラル構文で既存のテーブルのANSIテンポラルvalid-timeテーブルを作成することができます。このテーブルを使用して、すでに作成されている可能性のあるDateTime列を持つ既存のテーブルを変更できます。この列を使って、行内の情報が有効である有効期間を手動で追跡します。
テーブルに有効時間を追加する操作には、次に示すALTER TABLE操作が含まれます。
- valid-time期間の開始境界および終了境界として使用される2つのDateTime列を追加または変更する
- valid-time派生期間列のテーブルへの追加、および派生期間列VALIDTIMEの指定
構文
次のALTER TABLE構文を使用して、valid-time派生期間列を追加することにより、valid-timeテーブルを作成します。
valid-time派生期間列を削除するには、次の構文を使用します。
- table_name
- valid-timeテーブルの名前。データベース修飾子を含む場合があります。
- valid_time_period
- valid-time派生期間列の名前。
- valid_start
- valid-time期間の開始境界を保存する列の名前。
- valid_end
- valid-time期間の終了境界を保存する列の名前。
- [AS] VALIDTIME
- Teradata Databaseでvalid-timeテーブルを作成するために必要です。
- WITHOUT DELETE
- valid-time派生期間列をテーブルから削除するときに履歴行と将来行が自動的に削除されないようにします。WITHOUT DELETEは、ANSIに対するTeradata Databaseの拡張機能です。
ANSI準拠
この文はANSI SQL:2011に準拠していますが、非ANSI Teradata Database拡張機能を含みます。
使用上の注意
- [AS] VALIDTIMEは、ANSIに対する拡張機能です。これは、Teradata Databaseでvalid-timeテーブルを作成するために必要になります。[AS] VALIDTIME句を使用すれば、valid-timeテーブルのSELECT文でANSIがvalid-timeテーブルでサポートしていない特別なテンポラル修飾子(AS OF、BETWEEN...AND、FROM...TO、CONTAINED IN)を使用できます。詳細については、ANSI Valid-Timeテーブルの問合わせを参照してください。
- valid-time派生期間列をvalid-timeテーブルから削除すると、WITHOUT DELETEオプションを使用しない限り、履歴行と将来行がすべてテーブルから削除されます。
例: 非テンポラル テーブルをValid-Timeテーブルに変換するALTER TABLE
次のSQL文は通常の非テンポラル テーブルを作成し、行をいくつか挿入します。
CREATE MULTISET TABLE employee_vt ( eid INTEGER NOT NULL, ename VARCHAR(5) NOT NULL, terms VARCHAR(5), job_start DATE NOT NULL, job_end DATE NOT NULL ) PRIMARY INDEX(eid);
行が挿入された後に、修飾されていないSELECTをテーブルに実行すると、すべての行が返されます。
SELECT * FROM employee_systime; eid ename terms job_start job_end ---- ----- ----- ---------- ----------- 1002 Ash TA05 2003/01/01 2003/12/31 1005 Alice TW10 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/10
次のALTER TABLE文でテーブルをvalid-timeテンポラル テーブルに変換します。
ALTER TABLE employee_vt ADD PERIOD FOR job_dur(job_start,job_end) AS VALIDTIME;
system-timeテーブルと違って、valid-timeテーブルの非修飾SELECTでは、valid-time期間が過去か、現在か、将来かに関わらず、テーブル内のすべての行が表示されます。
SELECT * FROM employee_systime; eid ename terms job_start job_end ---- ----- ----- ---------- ----------- 1002 Ash TA05 2003/01/01 2003/12/31 1005 Alice TW10 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
SELECT問合わせ、およびUPDATE、DELETE変更でテンポラル修飾句を使用すると、valid-timeテーブルに自動テンポラル動作が明示されます。詳細については、ANSI Valid-Timeテーブルの問合わせとANSI Valid-Timeテーブルの行の変更を参照してください。