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 typeninteger
(32 bitar); annars antas det vara typbigint
om dess värde passar in typbigint
(64 bitar); annars antas det vara typnumeric
. Konstanter som innehåller decimaler och/eller exponenter antas alltid initialt vara typnumeric
.
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.