sql >> データベース >  >> RDS >> PostgreSQL

指定された名前と引数のタイプに一致する関数はありません

    関数にはいくつかのsmallintがあります パラメータ。
    ただし、呼び出しでは、タイプintegerであると推定される数値リテラルを使用しています。 。

    文字列リテラルまたは文字列定数('123' )はすぐには入力されません。明示的に割り当てられるかキャストされるまで、タイプは「不明」のままです。

    ただし、数値リテラルまたは数値定数 すぐに入力されます。マニュアル:

    小数点も指数も含まない数値定数は、最初はタイプintegerであると推定されます。 その値がタイプintegerに適合する場合 (32ビット);それ以外の場合は、type bigintであると見なされます。 その値がタイプbigintに適合する場合 (64ビット);それ以外の場合は、タイプnumericと見なされます 。小数点や指数を含む定数は、常に最初はタイプintegerであると見なされます。 。

    参照:

    • PostgreSQLエラー:関数to_tsvector(文字が変化する、不明)が存在しません

    解決策

    smallintの明示的なキャストを追加します パラメータまたは引用符で囲まれた(型指定されていない)リテラルを渡します。

    デモ

    CREATE OR REPLACE FUNCTION f_typetest(smallint)
      RETURNS bool AS 'SELECT TRUE' LANGUAGE sql;

    間違った呼び出し:

    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);
    

    db<>ここでフィドル
    古いsqlfiddle。



    1. ClusterControlとProxySQLでSQLファイアウォールを簡単に

    2. ストップワードとストップリストを使用してSQLServer全文検索(FTS)を改善する方法

    3. 1つの列を複数の外部キーとして参照することは可能ですか?

    4. シリアル化された配列内のmysqlselectクエリ