ASSOCIATE LOCATORS ステートメント

ASSOCIATE LOCATORS ステートメントは、プロシージャーから戻される結果セットごとの結果セット・ロケーター値を入手します。

呼び出し

このステートメントは、SQL プロシージャーに組み込む方法でのみ使用可能です。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

必要ありません。

構文

構文図を読む構文図をスキップするASSOCIATE RESULT SET LOCATORLOCATORS ( ,rs-locator-variable )WITH PROCEDURE procedure-name

説明

rs-locator-variable
コンパウンド SQL (プロシージャー) ステートメントで宣言されている結果セット・ロケーター変数を指定します。
WITH PROCEDURE
ここで指定したプロシージャー名で、 結果セット・ロケーターを戻すプロシージャーを識別します。
procedure-name
プロシージャー名は修飾または非修飾の名前です。

完全修飾のプロシージャー名は、2 つの部分からなる名前です。 最初の部分は、プロシージャーのスキーマ名を含んでいる ID です。 最後の部分は、プロシージャーの名前を含んでいる ID です。 それぞれの部分の間はピリオドで区切らなければなりません。 それらの部分の一部またはすべてを区切り ID にできます。

プロシージャー名が非修飾の場合、 暗黙的なスキーマ名が修飾子としてプロシージャー名に追加されることはないので、 プロシージャー名に含まれる名前は 1 つだけです。 ASSOCIATE LOCATOR ステートメントを正常に実行するのに必要なことは、 ステートメント内の非修飾のプロシージャー名を、最近実行した CALL ステートメント (ただし、 非修飾のプロシージャー名を使用するように指定したもの) でのプロシージャー名と同じにすることだけです。 その CALL ステートメントでの非修飾の名前の暗黙的なスキーマ名は、マッチングにおいて考慮されません。 プロシージャー名を指定する際に従わなければならない規則について、以下の段落で説明します。

ASSOCIATE LOCATORS ステートメントを実行する場合、プロシージャーの名前または指定で、 CALL ステートメントを使用して要求側が既に呼び出しているプロシージャーを識別しなければなりません。 ASSOCIATE LOCATORS ステートメントのプロシージャー名は、 CALL ステートメントで指定したのと同じ方法で指定しなければなりません。 例えば CALL ステートメントで 2 つの部分からなる名前を指定した場合、 ASSOCIATE LOCATORS ステートメントでも 2 つの部分からなる名前を使用しなければなりません。

  • ASSOCIATE LOCATORS ステートメントでリストされている結果セット・ロケーター変数の数が、 プロシージャーで戻されるロケーターの数より少ない場合、 ステートメント内のすべての変数に値が割り当てられ、警告が出されます。
  • ASSOCIATE LOCATORS ステートメントでリストされている結果セット・ロケーター変数の数が、 プロシージャーで戻されるロケーターの数より多い場合、 超過した変数に値 0 が割り当てられます。
  • あるプロシージャーが同じ呼び出し側から複数回呼び出される場合、 アクセス可能なのは、最新の結果セットだけです。
  • 結果セット・ロケーター値は、PREPARE ステートメントによって事前に準備された CALL ステートメントを実行する EXECUTE ステートメントを使用して呼び出されるプロシージャーで使用可能です。しかし、結果セット・ロケーター値は、EXECUTE IMMEDIATE ステートメントを使用して呼び出されるプロシージャーでは使用できません。
  • ASSOCIATE LOCATORS ステートメントで参照される module-procedure 名は、1 つまたは 2 つのみの部分から成る修飾名参照にすることができます。3 つの部分から成る名前参照は使用できません (SQLSTATE 42601)。ASSOCIATE LOCATORS ステートメントで参照された module-procedure を参照する CALL ステートメントは、ASSOCIATE LOCATORS ステートメントで使用されている名前と同じ 1 つまたは 2 つのみの部分から成る修飾名を使用して module-procedure を指定しなければなりません。

以下の例のステートメントは、SQL プロシージャーに組み込まれることを想定しています。

  • 例 1: 結果セット・ロケーター変数 LOC1 および LOC2 を使用して、プロシージャー P1 から戻される 2 つの結果セットの結果セット・ロケーター値を入手します。 プロシージャーが 1 つの部分だけからなる名前で呼び出されることを想定しています。
       CALL P1;
       ASSOCIATE RESULT SET LOCATORS (LOC1, LOC2)
         WITH PROCEDURE P1; 
  • 例 2: 例 1 のシナリオを繰り返しますが、 スキーマ MYSCHEMA で確実にプロシージャー P1 が使用されるように、 2 つの部分からなる名前を使用し、プロシージャーの明示的なスキーマ名を指定します。
       CALL MYSCHEMA.P1;
       ASSOCIATE RESULT SET LOCATORS (LOC1, LOC2)
         WITH PROCEDURE MYSCHEMA.P1;