-458   IN A REFERENCE TO FUNCTION function-name BY SIGNATURE, A MATCHING FUNCTION COULD NOT BE FOUND

説明

シグニチャーによる関数 function-name への参照において、一致する関数を 検出することはできませんでした。 問題は、データ・タイプまたはパラメーターの他の 属性のいくつかにある可能性があります。 データ・タイプによっては、データ・タイプの ほかに以下のような属性があります。

  • 長さ、精度、または位取り

    データ・タイプの長さ、精度、または位取りの属性を指定する必要はないが、いずれかが 指定された場合は、SYSPARMS で定義されている既存の関数の、対応するパラメーターの指定と 完全に一致しなければなりません。

    1<=n<=21 は REAL を意味し、22<=n<=53 は DOUBLE を意味するので、FLOAT(n) の タイプは n の定義済みの値に一致する必要はありません。 タイプが REAL か DOUBLE で あるかによって、突き合わせが行われます。

    しかし、データ・タイプの一致で十分です。

    これを示すために、長さ、精度、または位取りの指定が可能なデータ・タイプに対して、 空の括弧のセットを指定する必要があります。 例えば、CREATE FUNCTION ステートメントで パラメーターが CHAR(12) として定義された関数が存在すると想定して、シグニチャーによる その関数への参照は、このパラメーターを CHAR(12) または CHAR() として指定することが できます。 CHAR() 構文によって、一致する関数を検出するにあたって、長さ、精度、 桁数の属性を気にかける必要はないということができます。

    パラメーター値が、異なるデータ・タイプ (REAL または DOUBLE) を示すため、FLOAT() を 使用することはできません。

    しかし、長さ、精度、位取り、または空括弧のいずれも指定されなかった場合は、通常の デフォルト・ルールが適用されます。 例えば、CHAR の指定は、CREATE TABLE ステートメント での場合と同じように、CHAR(1) という結果になります。 さらに、長さ、精度、または 位取りのこの暗黙的な指定は、SYSPARMS で定義されている既存の関数の、対応する パラメーターの指定に厳密に一致しなければなりません。

  • サブタイプ、またはエンコード・スキーム

    データベースの中の既存の関数を識別するために、サブタイプまたは エンコード・スキーム (CCSID 文節) を指定する必要はありません。 しかし、サブタイプまたは エンコード・スキームが指定された場合は、SYSPARMS で定義されている既存の関数の、 対応するパラメーターの指定と完全に一致しなければなりません。

非修飾の関数名。

  • 関数での EXECUTE に対する ALTER FUNCTION、 DROP FUNCTION、 COMMENT ON FUNCTION、 GRANT および REVOKE ステートメント については、非修飾関数名がデフォルト・スキーマによって暗黙的に修飾されます。 これが、問題のある関数を検出できるスキーマです。
  • CREATE FUNCTION ステートメントの SOURCE 文節においては、修飾は SQL PATH から来ます。この場合、Db2® は、スキーマを使用している関数の呼び出しを、ユーザーの SQL パスで解決できませんでした。 詳しくは、CREATE FUNCTION (ソース派生)を参照してください。

システムの処置

このステートメントを処理することはできません。

プログラマーの応答

以下の処置が考えられます。
  • 正しいスキーマを組み込むように SQL パスを変更する。
  • パラメーターの属性を変更する。
  • SPECIFIC 名を使用して、シグニチャーの代わりに関数を参照する。

SQLSTATE

42883