修飾なしの関数参照の使用
修飾された関数参照の代わりに、修飾なしの関数参照を使用することができます。 一致する関数を検索する際に、Db2® は通常関数パスを使用して参照を修飾します。
DROP FUNCTION および COMMENT ON FUNCTION ステートメントのケースでは、これらのステートメントが *SQL 命名用に、または *SYS 命名のための *LIBL 用に修飾されていない場合は、参照は現行の権限 ID を使用して修飾されます。 したがって、関数パスが何であり、現行の関数パスのスキーマに対立する関数があればそれが何であるかを理解しておくことが重要になります。例えば、ユーザーが PABLO で、以下のような静的 SQL ステートメントがあるとします (ここで COLUMN1 はデータ・タイプ INTEGER です)。
SELECT BLOOP(COLUMN1) FROM T
「修飾された関数参照を使用する」のセクションで 2 つの BLOOP 関数が作成され、そのうちの 1 つを選択したいとします。以下のデフォルト関数パスが使用されている場合、QSYS または QSYS2 に対立する BLOOP がなければ、1 番目の BLOOP が選択されます (COLUMN1 が INTEGER であるため)。
"QSYS","QSYS2","PABLO"
しかし、以前に別の目的のために書いたスクリプトをいまプリコンパイルとバインディングのために使っていることを忘れたとします。このスクリプトでは、現行の作業には関係のない別の目的で以下に示す関数パスを指定するために、明示的に SQLPATH パラメーターがコーディングされています。
"KATHY","QSYS","QSYS2","PABLO"
スキーマ KATHY に BLOOP 関数がある場合、関数選択はその関数を非常にうまく解決し、 ステートメントはエラーなしで実行します。 Db2 は、ユーザーが正しく作業を行っていると想定しているので、通知は出されません。ユーザーのステートメントからの間違った出力を識別し、 必要な訂正を行うのはユーザーの責任です。