sql >> Databasteknik >  >> RDS >> PostgreSQL

Ingen funktion matchar det angivna namnet och argumenttyperna

Din funktion har ett par smallint parametrar.
Men i samtalet använder du numeriska bokstaver som antas vara typ integer .

En strängliteral eller strängkonstant ('123' ) skrivs inte omedelbart. Den förblir typ "okänt" tills den tilldelas eller castas explicit.

Däremot en numerisk bokstavlig eller numerisk konstant skrivs omedelbart. Manualen:

En numerisk konstant som varken innehåller en decimalpunkt eller anexponent förmodas initialt vara typen integer om dess värde passar in i typen integer (32 bitar); annars antas det vara typbigint om dess värde passar in typ bigint (64 bitar); annars antas det vara typ numeric . Konstanter som innehåller decimaler och/eller exponenter antas alltid initialt vara typ numeric .

Se även:

  • PostgreSQL FEL:funktion to_tsvector (tecken varierar, okänt) finns inte

Lösning

Lägg till explicita casts för smallint parametrar eller passera citerade (otypade) bokstaver.

Demo

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

Felaktigt samtal:

SELECT * FROM f_typetest(1);

Rätt samtal:

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

db<>spela här
Gammal sqlfiddle.



  1. order by newid() - hur fungerar det?

  2. Infoga CLOB i Oracle-databasen

  3. Använda DATEADD, DATEDIFF och DATEPART T-SQL-funktioner i enkla termer

  4. Hur AUTOINCREMENT fungerar i SQLite