sequenced更新では、適用期間でカバーされるそれぞれの時点で指定した行を変更します。つまり、有効期間が適用期間と重なる行は、重なる部分に対して変更が行なわれるということです。
sequenced更新では、UPDATE文に指定する選択の期間(適用期間)に応じて、valid-time次元の現在行、履歴行または将来行を変更できます。transaction-time次元が含まれる二重テンポラル テーブルでは、トランザクション時間でオープンの行のみがsequenced更新の対象とできます。
SET句で変更される列が行の値を変更しない場合は、その行がテンポラル更新のセマンティクスで変更されることはありません。更新のアクティビティ カウントには、その行が含まれます。また、更新トリガーではそのような行を対象としますが、変更のセマンティクス(行のクローズ、オープン、または新しい行の作成)は実行されません。
sequenced更新の適用期間と重なる有効期間を持つオープン行のみが、更新の候補になります。必要に応じて、valid-time列とtransaction-time列の値に追加の修飾子を設定して、更新の対象になる行をさらにフィルタに掛けることができます。
valid-timeテーブルの行に対するsequenced更新では、行の有効期間と更新の適用期間とのリレーションシップに応じて、古い行の変更と、場合によっては新しい行の挿入が発生します。
二重テンポラル テーブルの行に対するsequenced更新では、最初に古い行がトランザクション時間でクローズされます。その行のコピーが作成され、トランザクション時間でオープンされ、該当する更新の構文で変更が実行されます。このような変更は、行の有効期間と更新文で指定した適用期間とのリレーションシップに応じて、単純に行を更新することになったり、行を2つまたは3つの行に分割することになったりします。
次に示すテーブルでは、有効時間を含むテーブルでのsequenced更新操作について説明しています。
更新の適用期間 | THEN … |
---|---|
行の有効期間内に含まれる | 行は更新の対象となります。ただし、有効期間が更新の適用期間と重なる部分の期間に限られます。 行の値が更新される期間は元の行の有効期間の一部になるため、元の行の値は更新の適用期間の前後で有効のままになります。そのため、更新操作の結果として3つの行が発生します。
|
適用期間の開始境界値が、有効期間の開始境界値と終了境界値の間になるように、有効期間と重なる | 更新の結果として、1つの新しい行と1つの古い既存の行が発生します。
|
適用期間の終了境界値が、有効期間の開始境界値と終了境界値の間になるように、有効期間と重なる | 更新の結果として、1つの新しい行と1つの古い既存の行が発生します。
|
有効期間を含む(適用期間と有効期間が等しい場合も含む) | 指定した列の既存の行が更新されます。有効期間に変更はありません。 |
更新対象のテーブルに定義されたテンポラル制約は、変更された既存の行と、新しく挿入された行の両方に適用されます。