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