アンカー・タイプのアンカー・オブジェクトの解決

ROW を指定しないアンカー・タイプのアンカー・オブジェクトは、SQL 変数、SQL パラメーター、グローバル変数、モジュール変数、表の列、またはビューの列を表すことが可能な名前を使用して指定されます。

アンカー・オブジェクトを解決する方法は、アンカー・オブジェクト名にある ID 数、および ANCHOR 節を使用するステートメントのコンテキストによって異なります。
  • アンカー・オブジェクト名を 1 つの ID で指定すると、その名前によって SQL 変数、SQL パラメーター、モジュール変数、またはグローバル変数を表すことができます。
  • アンカー・オブジェクト名を 2 つの ID を使用して指定すると、その名前によって、ラベル修飾された SQL 変数、ルーチン修飾された SQL パラメーター、スキーマ修飾されたグローバル変数、モジュール変数、表の列、またはビューの列を表すことができます。
  • アンカー・オブジェクト名を 3 つの ID を使用して指定すると、その名前によって、スキーマ修飾された表の列、スキーマ修飾されたビューの列、現行サーバー名とスキーマによって修飾されたグローバル変数、またはスキーマ修飾されたモジュール変数を表すことができます。
ANCHOR 節がコンパウンド・ステートメントの SQL 変数宣言で使用されている場合に限り、SQL 変数はアンカー・オブジェクト名の候補となります。ANCHOR 節が SQL ルーチン本体で使用されているコンパウンド・ステートメントの SQL 変数宣言で用いられている場合に限り、SQL パラメーターはアンカー・オブジェクト名の候補となります。
ID が 1 つの場合のアンカー・オブジェクト名の解決は、以下の手順を使用して行われます。
  1. ANCHOR 節がコンパウンド・ステートメントの SQL 変数宣言にある場合、一致する SQL 変数名を検索しますが、その場合、最も内側にネストされているコンパウンドから開始して、最も外側のコンパウンドに向けて順番に検索を行います。
  2. ANCHOR 節がルーチン本体内のコンパウンド・ステートメントの SQL 変数宣言にある場合、そのルーチンで一致する SQL パラメーター名を検索します。
  3. ANCHOR 節がモジュール・オブジェクトの定義で使用されていると、そのモジュール内で一致するモジュール変数名を検索します。
  4. それでも検出されない場合、最初の ID をスキーマ名として、および 2 番目の ID を表名またはビュー名として使用して、表またはビューを検索します。
  5. まだ検出されない場合、SQL パス上で、一致するグローバル変数名を持つグローバル変数を検索します。
ID が 2 つの場合のアンカー・オブジェクト名の解決は、以下の手順を使用して行われます。
  1. ANCHOR 節がコンパウンド・ステートメントの SQL 変数宣言にある場合、一致する修飾 SQL 変数名を検索しますが、その場合、最も内側にネストされているコンパウンドから開始して、最も外側のコンパウンドに向けて順番に検索を行います。
  2. ANCHOR 節がルーチン本体内のコンパウンド・ステートメントの SQL 変数宣言にある場合、アンカー・オブジェクト名の最初の ID がルーチンの名前と一致するのであれば、そのルーチンで一致する SQL パラメーター名を検索します。
  3. ANCHOR 節がモジュール・オブジェクトの定義で使用されていて、最初の ID がそのモジュールのモジュール名と一致する場合、2 番目の ID と一致するモジュール内のモジュール変数名を検索します。
  4. それでも検出されない場合、最初の ID を表名またはビュー名として、および 2 番目の ID を列名として使用して、現行のスキーマ内の表またはビュー列を検索します。
  5. まだ検出されない場合、最初の ID をスキーマ名として、2 番目の ID をグローバル変数名として使用して、グローバル変数を検索します。
  6. 検出されなかった場合で、かつステップ 3 でモジュールを検索しなかった場合、最初の ID と一致する名前を持つ、SQL パス上のモジュールを検索します。 検出される場合、2 番目の ID を使用して、モジュール内で一致するパブリッシュ済みモジュール変数名を検索します。
  7. ステップ 6 で SQL パスを使用してモジュールが見つからない場合、最初の ID の名前と一致するモジュール・パブリック別名を調べます。検出される場合、2 番目の ID を使用して、モジュール・パブリック別名で識別されるモジュール内の、一致するパブリッシュ済みモジュール変数名を検索します。
ID が 3 つの場合のアンカー・オブジェクト名の解決は、以下の手順を使用して行われます。
  1. ANCHOR 節がモジュール・オブジェクトの定義で使用されていて、最初の 2 つの ID がそのモジュールのスキーマ名とモジュール名と一致する場合、最後の ID と一致する名前のモジュール変数を検索します。
  2. 前述のステップで見つからない場合、またはそのステップが当てはまらない場合、最初の ID をスキーマ名、2 番目の ID を表名またはビュー名、3 番目の ID を列名として使用して、表列またはビュー列を検索します。
  3. 前述のステップで見つからず、最初の ID が現行のサーバー名と同じ場合、2 番目の ID をスキーマ名、3 番目の ID をグローバル変数名として使用してグローバル変数を検索します。
  4. 未検出で、ステップ 1 でモジュールを検索しなかった場合、最初の ID をスキーマ名、2 番目の ID をモジュール名として使用してパブリッシュ済みモジュール変数を検索します。そのようなモジュールが存在する場合には、3 番目の ID を使用して、モジュール内で一致するパブリッシュ済みモジュール変数名を検索します。