CURRENT TEMPORAL BUSINESS_TIME 特殊レジスター

CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターは、アプリケーション期間のテンポラル表への参照のためのデフォルトの BUSINESS_TIME 期間指定で使用される TIMESTAMP(12) 値を指定します。

アプリケーション期間テンポラル表が参照され、CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの有効な値が CTBT (NULL 以外の値) で表される場合、以下の期間が暗黙的に指定されます。
FOR BUSINESS_TIME AS OF CTBT
アプリケーション期間テンポラル表が UPDATE または DELETE ステートメントのターゲットであり、 CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターで有効になっている値が NULL 値ではない場合、 以下の述部が暗黙的に追加で指定されます。
bt_begin <= CURRENT TEMPORAL BUSINESS_TIME
    AND bt_end > CURRENT TEMPORAL BUSINESS_TIME
where bt_begin and bt_end are the begin and end columns of the BUSINESS_TIME period of the target table of the UPDATE statement.

ユーザー定義の関数またはプロシージャー内の特殊レジスターの初期値は、 呼び出し側アプリケーションから継承されます。 その他のコンテキストでは、特殊レジスターの初期値は NULL 値です。

SET CURRENT TEMPORAL BUSINESS_TIME ステートメントを実行することにより、この特殊レジスターの値を変更できます。

CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの設定は、以下のコンパイル済み SQL オブジェクトに影響を及ぼします (BUSTIMESENSITIVE バインド・オプションを YES に設定して関連パッケージがバインドされている場合)。
  • SQL プロシージャー
  • コンパイル済み関数
  • コンパイル済みトリガー
  • コンパウンド SQL (コンパイル済み) ステートメント
  • 外部 UDF
BUSTIMESENSITIVE バインド・オプションの設定は、パッケージ内の静的 SQL ステートメントと動的 SQL ステートメントでのアプリケーション期間テンポラル表とバイテンポラル表への参照が CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの値の影響を受けるかどうかを決定します。 バインド・オプションは、YES または NO に設定できます。

以下の例では、表 IN_TRAY がアプリケーション期間のテンポラル表であると想定します。

例 1: CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターによって指定された日付現在の、IN_TRAY にあるメッセージの状態に基づき、ユーザー ID とサブジェクト行をリストします。
SELECT SOURCE, SUBJECT FROM IN_TRAY
CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターが以前は値 CURRENT TIMESTAMP-4 DAYS に設定されていて、現在は NULL 値に設定されているとすると、次のステートメントは同じ結果を戻します。
SELECT SOURCE, SUBJECT 
    FROM IN_TRAY 
    FOR BUSINESS_TIME AS OF CURRENT TIMESTAMP-4 DAYS
例 2: CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターによって指定された日付より前に送信された、IN_TRAY にあるメッセージのユーザー ID とサブジェクト行をリストします。
SELECT SOURCE, SUBJECT 
    FROM IN_TRAY
    WHERE DATE(RECEIVED) < DATE(CURRENT TEMPORAL BUSINESS_TIME)
CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターが以前は '2011-01-01-00.00.00' に設定されていて、現在は NULL 値に設定されているとすると、次のステートメントは同じ結果を戻します。
SELECT SOURCE, SUBJECT
   FROM IN_TRAY
   FOR BUSINESS_TIME AS OF '2011-01-01-00.00.00'
   WHERE DATE(RECEIVED) < DATE('2011-01-01-00.00.00')