グローバル変数の使用
グローバル変数を使用するには、使用の制限事項、グローバル変数に対する割り当ての規則、グローバル変数値を取得するための規則を理解する必要があります。
使用上の制限
グローバル変数は、SQL 式から参照できます。ただし、式のコンテキストで式が決定論的であることが必要な場合は例外です。
以下の各シチュエーションは、
決定論的である式を必要とするためにグローバル変数の使用が除外されるコンテキストの例です。
- 表チェック制約またはデータ・タイプチェック制約の場合
- 生成された式列の定義の場合
- 即時リフレッシュのマテリアライズ照会表 (MQT) の場合
グローバル変数のデータ・タイプがカーソル・タイプである場合、グローバル・カーソル変数の基礎カーソルは、cursor-variable-name を指定できる任意の場所で参照できます。
グローバル変数のデータ・タイプが行タイプである場合、グローバル行変数のフィールドは、そのフィールドと同じタイプのグローバル変数を参照できる場所であればどこでも参照が可能です。フィールド名を修飾するグローバル変数名は、他のグローバル変数名と同じ方法で解決されます。
割り当て
グローバル変数の値は、以下の条件のどちらも真の場合には変更が可能です。
- グローバル変数が読み取り専用変数ではない。
- ステートメントの許可 ID に、グローバル変数への書き込みが許可されている。
グローバル変数には、以下の SQL ステートメントを使用して値を割り当てることができます。
- ターゲット変数としてグローバル変数が使用される SET 変数ステートメント
- INTO 節で割り当てターゲットとしてグローバル変数が使用される EXECUTE、FETCH、SELECT INTO、VALUE INTO の各ステートメント
- プロシージャーの OUT パラメーターまたは INOUT パラメーターの引数としてグローバル変数が使用される CALL ステートメント
- 関数の OUT パラメーターまたは INOUT パラメーターの引数としてグローバル変数が使用される関数呼び出し (これがサポートされているのは、SET 変数ステートメントのソース式だけです)。
取得
グローバル変数の値は、 値を必要とする SQL コンテキストの中から変数を参照して取得します。
以下の表は、それぞれ示されているグローバル変数参照において、どの時点でグローバル変数の値が読み取られるかを示しています。
| グローバル変数参照のコンテキスト | この処理の開始時点におけるグローバル変数の値が参照で使われる: |
|---|---|
| コンパウンド SQL (インライン化) ステートメントの中の SQL ステートメント | コンパウンド SQL (インライン化) ステートメント |
| コンパウンド SQL (コンパイル済み) ステートメントの中の SQL ステートメント | コンパウンド SQL (コンパイル済み) ステートメント内の SQL ステートメント |
| 関数呼び出しまたはトリガー起動を行う可能性がある SQL ステートメント 1 | その SQL ステートメント |
| 呼び出されるインライン化された SQL 関数の中の SQL ステートメント | インライン化された SQL 関数を呼び出す SQL ステートメント |
| アクティブ化されるインライン化トリガー中の SQL ステートメント | インライン化されたトリガーをアクティブ化する SQL ステートメント |
| 呼び出されるインライン化された SQL メソッドの中の SQL ステートメント | インライン化された SQL メソッドを呼び出す SQL ステートメント |
| 呼び出されるコンパイル済み SQL 関数の中の SQL ステートメント | コンパイル済み SQL 関数の中の SQL ステートメント |
| アクティブ化されるコンパイル済みトリガー中の SQL ステートメント | コンパイル済みトリガーの中の SQL ステートメント |
| 呼び出される外部ルーチンの中の SQL ステートメント | 外部ルーチンの中の SQL ステートメント |
注: 1 この表では、関数を呼び出したりトリガーをアクティブ化したりする可能性のある SQL ステートメントには、コンパウンド SQL (インライン化) ステートメントまたはコンパウンド SQL (コンパイル済み) ステートメントが含まれていません。
|
|