関数解決

関数はその関数名によって呼び出されます。関数名は、暗黙的にまたは明示 的にスキーマ名で修飾され、その後に括弧で囲まれた関数への引数が 続きます。

データベース内では、それぞれの関数はその関数のシグニチャー によって一意的に識別されます。シグニチャーとは、そのスキーマ名、関数名、パラメーター数、およびパラメーターのデータ・タイプのことです 。このため、スキーマでは、関数名が同じでも、それぞれパラメーター 数が異なるか、パラメーター・データ・タイプが異なるため、複数の関数を 持つことができます。あるいは、名前やパラメーター数、パラメーターのタ イプが同じ関数でも、別々のスキーマには存在することができます。 関数が呼び出されると、データベース・マネージャーは実行すべき関数を決定することが必要になります。 このプロセスを、関数解決 と呼びます。

変更の始まり

一群の候補関数の判別:

関数呼び出しを解決するための候補関数は、以下の基準で選択されます。

変更の終わり

関数解決は、関数を修飾関数名を指定して呼び出した場合と非修飾関数名を指定して 呼び出した場合で同じです。ただし、非修飾名を指定した場合、データベース・マネージャーは複数の スキーマを検索する必要があります。

データベース・マネージャーは、候補の関数を識別した後で、実行する関数インスタンスとして最適のものを 選択します (最適の判別を参照してください)。最適 (関数シグニチャーがスキーマ名を除いて同一) の関数インスタン スが、複数のスキーマにある場合は、データベース・マネージャーは SQL パスで一番早い スキーマの関数を選択します。

関数解決は、組み込み関数を含むすべての関数に適用されます。組み込み関数は、スキーマ QSYS2 に論理的に存在します。スキーマ QSYS2 が SQL パスで明示的に指定されていない場合は、スキーマは暗黙 的にそのパスの前にあるものと見なされます。非修飾関数名を指定する場合は、対象の関数が選択されるようにするために、各スキーマを正しい検索順序で並べたリストを SQL パスとして設定しなければなりません。

変更の始まり CREATE VIEW または CREATE TABLE ステートメント では、ビューまたはマテリアライズ照会表の作成時に関数解決 が実行されます。その後で同じ名前の他の関数が作成された場合でも、そのビューまたはマテリアライズ照会表は影響を受けません。そのビューまたはマテリアライズ表の作成時に選択された関数よりもその新しい関数のほうが適しているとしても、その動作に変わりはありません。CREATE FUNCTION、 CREATE PROCEDURE、CREATE TRIGGER、CREATE VARIABLE、CREATE MASK、 または CREATE PERMISSION ステートメントでは、関数、プロシージャー、 トリガー、変数、マスク、または許可が作成されるときに、関数解決が 実行されます。選択された関数のスキーマが、トリガー、変数、マスク、および許可 で保存されます。また、デフォルト式の関数およびプロシージャーでも 保存されます。後で同じ名前の別の関数が作成された場合、 関数、プロシージャー、トリガー、変数、マスク、許可、またはルーチン・デフォルト に影響が及ぶのは、オブジェクトが作成された時点で選択された関数よりも新しい関数 のほうがより適している場合のみです。 変更の終わり