グローバル変数参照の解決
グローバル変数参照の解決は、グローバル変数名が修飾されているかどうか、およびグローバル変数の参照場所によって異なります。
列、SQL 変数、SQL パラメーター、または行変数フィールドの名前に関連するグローバル変数参照の解決順序については、SQL パラメーター、SQL 変数、およびグローバル変数の参照で説明されています。
CREATE、ALTER、COMMENT、DROP、GRANT、REVOKE の各ステートメントのメイン・オブジェクトとして使用する非修飾のグローバル変数名の暗黙的な修飾については、非修飾のユーザー定義タイプ、関数、プロシージャー、グローバル変数、モジュール、および固有の名前で説明されています。
ベスト・プラクティスは、SQL ステートメントでグローバル変数を参照する場合にはそのグローバル変数名を完全修飾することです。 このようにすると、SQL パスが後で変更されても、グローバル変数の解決に影響を与える恐れがなくなります。
他のすべてのコンテキストでは、データベース・マネージャーによるグローバル変数参照の解決は、グローバル変数名が修飾されているかどうかによって異なります。
修飾名
修飾されているグローバル変数名を解決するには、以下のプロセスに従って参照が評価されます。
- Iグローバル変数がモジュール内から参照され、モジュールの名前と修飾子が一致する場合、モジュール内で一致するモジュール・グローバル変数を検索します。
以下の規則が適用されます。
- 修飾子が単一の ID である場合、モジュール名と修飾子を比較する際にモジュールのスキーマ名は無視されます。
- 修飾子が 2 つの部分から成る ID の場合、スキーマによって修飾されたモジュール名と比較されます。
- 修飾子はスキーマ名と見なされるようになります。指定のスキーマ内で、
一致するスキーマ・グローバル変数を検索します。
- スキーマ・グローバル変数名が参照内の修飾されていないグローバル変数名と一致する場合、解決は完了します。
- スキーマが存在しない場合には、エラーが戻されます。
- スキーマ内に一致するスキーマ・グローバル変数がない場合、最初の手順で修飾子がモジュールの名前と一致したのであれば、エラーが返されます。
- 一致しなければ、解決は次の手順に進みます。
- 修飾子はモジュール名と見なされるようになります。以下の規則が適用されます。
- モジュール名がスキーマ名で修飾されている場合、このモジュール内で一致するパブリッシュ済みモジュール・グローバル変数を検索します。
- モジュール名がスキーマ名で修飾されていない場合、モジュールのスキーマは、一致するモジュール名を持つ SQL パスの最初のスキーマです。モジュール名が SQL パスで見つかったスキーマ名と一致する場合、このモジュール内で一致するパブリッシュ済みモジュール・グローバル変数を検索します。
- SQL パスによってモジュールが見つからない場合、グローバル変数修飾子の名前に一致する、モジュールのパブリック別名の有無が考慮されます。 モジュール・パブリック別名が見つかった場合、 そのモジュール・パブリック別名に関連付けられているモジュール内で、一致するパブリッシュ済みのモジュール・グローバル変数を検索します。
非修飾名
非修飾のグローバル変数の名前を解決するには、以下のプロセスに従って参照が評価されます。
- 修飾されていないグローバル変数がモジュール内から参照される場合、そのモジュール内で一致するモジュール・グローバル変数を検索します。 モジュール・グローバル変数名が参照内のグローバル変数名と一致する場合、解決は完了します。一致するモジュール・グローバル変数がない場合、解決は次の手順に進みます。
- SQL パス内のスキーマで、一致するスキーマ・グローバル変数が左から右に検索されます。スキーマ・グローバル変数名が参照内のグローバル変数名と一致する場合、解決は完了します。このステップの完了後に一致するグローバル変数が見つからない場合は、エラーが返されます。