ホームページ >データベース >mysql チュートリアル >SQL 関数呼び出しが「関数が存在しません」エラーで失敗するのはなぜですか?

SQL 関数呼び出しが「関数が存在しません」エラーで失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 09:33:11269ブラウズ

Why Does My SQL Function Call Fail with

エラー: 関数が存在せず、一致する関数が見つかりません

次のエラー メッセージを考えてみましょう:

ERROR:  function fnupdatesalegtab09(integer, integer, integer, integer, integer, unknown, unknown, integer, unknown, integer, unknown, integer, integer, integer, numeric, integer, integer, unknown, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, unknown, integer, boolean, unknown, unknown, unknown, unknown, boolean, unknown, unknown, integer, unknown, integer, integer, integer, integer, integer) does not exist  
LINE 1: select FnUpdateSalegtab09 (4, 1, 0, 12, 1, '9','2014-07-15',...
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.  

このシナリオでは、特定のパラメータを指定して FnUpdateSalegtab09 という名前の関数を呼び出すように作られていました。ただし、エラーは関数が存在しないことを示しています。さらに、このエラーは、指定された名前と引数の型に一致する関数がないことを示しています。

根本原因

このエラーは、キャストの問題が原因である可能性があります。関数呼び出しでは、関数定義で smallint として定義されているパラメーターに数値リテラルが使用されます。数値リテラルは、その値が整数型に適合する場合、最初は整数型であると推定されます。明示的な型キャストが提供されていないため、予期される引数の型と実際の引数の型が一致しない可能性があります。

解決策

この問題を解決するには、明示的な型キャストを数値リテラルに追加します。期待される smallint データ型と一致するように関数を呼び出します。あるいは、関数呼び出しで引用符付き (型なし) リテラルを使用することもできます。

間違った呼び出し:

SELECT * FROM f_typetest(1);

正解通話:

SELECT * FROM f_typetest('1');
SELECT * FROM f_typetest(smallint '1');
SELECT * FROM f_typetest(1::int2);
SELECT * FROM f_typetest('1'::int2);

これらの調整により、関数呼び出しはエラーなしで認識され、実行されるようになります。

以上がSQL 関数呼び出しが「関数が存在しません」エラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。