グローバル変数

グローバル変数は、SQL ステートメントによってアクセスする名前付きメモリー変数です。 グローバル変数を使用すると、SQL ステートメント間でリレーショナル・データを共用でき、そのデータ転送をサポートするアプリケーション・ロジックは必要ありません。

Db2 データベース管理システムは、以下のグローバル変数をサポートしています

組み込みグローバル変数

組み込みグローバル変数はデータベース・マネージャーに用意されているもので、その変数に関連付けられたスカラー値を取得するために SQL ステートメントで使用します。 組み込みグローバル変数は、データベース・マネージャーで実行される SQL ステートメントで使用できます。 組み込みグローバル変数は、SYSIBM スキーマおよび SYSIBMADM スキーマに常駐します。 例えば、SQL ステートメントで CLIENT_IPADDR 組み込みグローバル変数を参照して、現行クライアントの IP アドレスを取得することができます。

組み込みグローバル変数のリストとこれらの変数の詳細については、 「組み込みグローバル変数」を参照してください。

組み込みグローバル変数の値を取得するステートメントでは、組み込みグローバル変数に対する READ 特権が必要となります。 組み込みグローバル変数に対する READ 特権は、インストール時に PUBLIC に暗黙的に付与されます。

更新可能な組み込みグローバル変数に値を割り当てるステートメントでは、更新可能な組み込みグローバル変数に対する WRITE 特権が必要となります。 更新可能な組み込みグローバル変数に対する書き込み権限は、GRANT (変数特権) ステートメントおよび REVOKE (変数特権) ステートメントを使用して制御できます。

例: 組み込みグローバル変数の使用

組み込みグローバル変数の値は、値を必要とするコンテキストでその変数を参照することによって取得できます。

SELECT C1, C2 
  FROM T1
  WHERE C3 = CLIENT_IPADDR

グローバル変数 CLIENT_HOST にアクセスするには、以下の照会を実行します。

SELECT SYSIBM.CLIENT_IPADDR
  FROM SYSIBM.SYSDUMMY1

この照会は、現行クライアントの IP アドレスを返します。

1111:2222:3333:4444:5555:6666:7777:8888

更新可能な組み込みグローバル変数の値を変更するには、以下のような「SET 変数」ステートメントを発行します。

SET SYSIBMADM.GET_ARCHIVE = 'Y'
ユーザー定義グローバル変数
ユーザー定義グローバル変数は、その変数が定義されているデータベース・マネージャーで実行されるすべてのアクティブ SQL ステートメントで使用できます。 ユーザー定義グローバル変数の値は特定のセッションに関連付けられており、そのセッションに固有の値が入ります。 ユーザー定義グローバル変数を使用すると、ユーザー独自の変数定義またはサード・パーティー・ベンダーの変数定義を追加して、データベース管理システムの機能を拡張することができます。

ユーザー定義グローバル変数は、CREATE VARIABLE ステートメントを使用して作成され、カタログでデータベース・マネージャーに登録されます。 ユーザー定義グローバル変数は、それが作成されたスキーマに常駐します。 詳細はCREATE VARIABLE文を参照してください。

GRANT ステートメント (変数権限) および REVOKE ステートメント (変数権限) を使用して、ユーザー定義のグローバル変数へのアクセスを制御できます。 グローバル変数を使用するために必要な許可は、そのグローバル変数の定義場所と使用法に応じて異なります。

  • ユーザー定義グローバル変数を参照して値を取得する SQL ステートメントの許可 ID には、グローバル変数に対する READ 特権が必要です。
  • ユーザー定義グローバル変数を参照して値をその変数に割り当てる SQL ステートメントの許可 ID には、グローバル変数に対する WRITE 特権が必要です。

ユーザー定義グローバル変数の値は、値が必要なコンテキストでその変数を参照することによって取得できます。 ユーザー定義グローバル変数の値は、以下のステートメントを使用して変更できます。

  • EXECUTE
  • FETCH
  • SET
  • SELECT INTO
  • VALUES INTO
  • CALL (変数が、対応するパラメーターが OUT パラメーターまたは INOUT パラメーターとして定義されるプロシージャーへの引数である場合)

グローバル変数に解決するための非修飾名の参照は、参照のコンテキストおよびそのコンテキスト内で参照が修飾される方法に応じて、SQL 変数、SQL パラメーター、または列名に解決することもできます。 非修飾変数名の暗黙的スキーマ名は、その名前が指定されているコンテキストによって決まります。

  • 非修飾変数名を CREATE VARIABLE 内で、または DROP、COMMENT、GRANT、または REVOKE のいずれかのステートメントのオブジェクトで使用した場合、許可 ID によって消去する通常のプロセスを使用してスキーマ名が決定されます。
  • 非修飾変数名をその他のコンテキストで使用した場合、SQL パスを使用してスキーマ名が決定されます。 データベース・マネージャーは、SQL パス内でスキーマを順に検索します。 選択されるスキーマは、そのグローバル変数を含んでいるスキーマであり、かつユーザーがその変数を使用する許可を持っている、SQL パス内の最初のスキーマです。 SQLパスの説明については、「SQLパス」 を参照してください。