グローバル変数参照の解決

グローバル変数参照の解決は、グローバル変数名が修飾されているかどうか、およびグローバル変数の参照場所によって異なります。

列、SQL 変数、SQL パラメーター、または行変数フィールドの名前に関連するグローバル変数参照の解決順序については、SQL パラメーター、SQL 変数、およびグローバル変数の参照で説明されています。

CREATE、ALTER、COMMENT、DROP、GRANT、REVOKE の各ステートメントのメイン・オブジェクトとして使用する非修飾のグローバル変数名の暗黙的な修飾については、非修飾のユーザー定義タイプ、関数、プロシージャー、グローバル変数、モジュール、および固有の名前で説明されています。

ベスト・プラクティスは、SQL ステートメントでグローバル変数を参照する場合にはそのグローバル変数名を完全修飾することです。 このようにすると、SQL パスが後で変更されても、グローバル変数の解決に影響を与える恐れがなくなります。

他のすべてのコンテキストでは、データベース・マネージャーによるグローバル変数参照の解決は、グローバル変数名が修飾されているかどうかによって異なります。

修飾名

修飾されているグローバル変数名を解決するには、以下のプロセスに従って参照が評価されます。

  1. Iグローバル変数がモジュール内から参照され、モジュールの名前と修飾子が一致する場合、モジュール内で一致するモジュール・グローバル変数を検索します。 以下の規則が適用されます。
    • 修飾子が単一の ID である場合、モジュール名と修飾子を比較する際にモジュールのスキーマ名は無視されます。
    • 修飾子が 2 つの部分から成る ID の場合、スキーマによって修飾されたモジュール名と比較されます。
    モジュール・グローバル変数の名前が参照内の修飾されていないグローバル変数名と一致する場合、解決は完了します。修飾子がモジュールの名前と一致しないか、または一致するモジュール・グローバル変数がない場合、解決は次の手順に進みます。
  2. 修飾子はスキーマ名と見なされるようになります。指定のスキーマ内で、 一致するスキーマ・グローバル変数を検索します。
    • スキーマ・グローバル変数名が参照内の修飾されていないグローバル変数名と一致する場合、解決は完了します。
    • スキーマが存在しない場合には、エラーが戻されます。
    • スキーマ内に一致するスキーマ・グローバル変数がない場合、最初の手順で修飾子がモジュールの名前と一致したのであれば、エラーが返されます。
    • 一致しなければ、解決は次の手順に進みます。
  3. 修飾子はモジュール名と見なされるようになります。以下の規則が適用されます。
    • モジュール名がスキーマ名で修飾されている場合、このモジュール内で一致するパブリッシュ済みモジュール・グローバル変数を検索します。
    • モジュール名がスキーマ名で修飾されていない場合、モジュールのスキーマは、一致するモジュール名を持つ SQL パスの最初のスキーマです。モジュール名が SQL パスで見つかったスキーマ名と一致する場合、このモジュール内で一致するパブリッシュ済みモジュール・グローバル変数を検索します。
    • SQL パスによってモジュールが見つからない場合、グローバル変数修飾子の名前に一致する、モジュールのパブリック別名の有無が考慮されます。 モジュール・パブリック別名が見つかった場合、 そのモジュール・パブリック別名に関連付けられているモジュール内で、一致するパブリッシュ済みのモジュール・グローバル変数を検索します。
    パブリッシュ済みのモジュール・グローバル変数の名前がグローバル変数の参照内の修飾されていないグローバル変数名と一致する場合、解決は完了します。一致するモジュールが見つからない場合、または一致するモジュール内に一致するモジュール・グローバル変数が存在しない場合、エラーが返されます。

非修飾名

非修飾のグローバル変数の名前を解決するには、以下のプロセスに従って参照が評価されます。

  1. 修飾されていないグローバル変数がモジュール内から参照される場合、そのモジュール内で一致するモジュール・グローバル変数を検索します。 モジュール・グローバル変数名が参照内のグローバル変数名と一致する場合、解決は完了します。一致するモジュール・グローバル変数がない場合、解決は次の手順に進みます。
  2. SQL パス内のスキーマで、一致するスキーマ・グローバル変数が左から右に検索されます。スキーマ・グローバル変数名が参照内のグローバル変数名と一致する場合、解決は完了します。このステップの完了後に一致するグローバル変数が見つからない場合は、エラーが返されます。