目的
新しいANSI system-timeテーブルを作成します。
構文
CREATE MULTISET TABLE table_name ( sys_start TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW START, sys_end TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME ( sys_start, sys_end ) ) WITH SYSTEM VERSIONING [;]
- table_name
- system-timeテーブルの名前。データベース修飾子を含む場合があります。
- sys_start
- system-time期間の開始境界を保存する列の名前。
- GENERATED ALWAYS AS ROW START
- system-time期間の開始境界を定義する列の必須属性。
- sys_end
- system-time期間の終了境界を保存する列の名前。
- GENERATED ALWAYS AS ROW END
- system-time期間の終了境界を定義する列の必須属性。
- PERIOD FOR SYSTEM_TIME
- system-time派生期間列を作成します。
- SYSTEM VERSIONING
- system-timeテンポラル テーブルの必須属性。CREATE TABLE文の最後の句でなければなりません。
ANSI準拠
この文は、ANSI SQL:2011に準拠しています。
使用上の注意
- sys_start列は、NOT NULLおよびGENERATED ALWAYS AS ROW STARTとして定義する必要があります。sys_end列はNOT NULLおよびGENERATED ALWAYS AS ROW ENDとして定義する必要があります。
- GENERATED ALWAYS AS ROW STARTまたはEND属性は、SYSTEM_TIME派生期間列を構成する列の定義から削除することはできません。
- system-time派生期間列の構成要素列は、プライマリインデックスの一部にすることはできません。
- テンポラル テーブルとして機能するには、WITH SYSTEM VERSIONINGでsystem-timeテーブルを定義する必要があります。(Valid-timeテーブルにはシステムのバージョン情報がありません。)
- 1つのテーブルは1つのsystem-time期間定義のみ持つことができます。
- system-timeテーブルは、キュー、エラー、グローバル一時、グローバル一時トレース、または揮発テーブルにすることはできません。
- システム時間によるテーブルのCHECK制約にsystem-time期間の開始列または終了列を含むことはできません。
- system-time期間の開始列および終了列は、テンポラル参照制約のプライマリキーまたは外部キーにすることはできません。
- System-timeテーブルは、CREATE TABLE AS文でソース テーブルの役割を果たすことはできません。
- system-time派生期間列で統計情報を収集することはできませんが、構成要素の開始および終了時間列で収集できます。
- アルゴリズム圧縮(ALC)は、テンポラル派生期間列の開始および終了境界値の役割を果たすDateTime列では使用できません。
例: System-Timeテーブルの作成
次の例ではsystem-timeテーブルを作成して、このテーブルをテンポラル テーブルにするために必要なsystem versioning句が含まれます。
CREATE MULTISET TABLE employee_system_time ( eid INTEGER NOT NULL, name VARCHAR(10)NOT NULL, deptno INTEGER NOT NULL, sys_start TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW START, sys_end TIMESTAMP(6) WITH TIME ZONE NOT NULL GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME(sys_start, sys_end) ) PRIMARY INDEX (eid) WITH SYSTEM VERSIONING;