sql >> Database >  >> RDS >> PostgreSQL

Geen enkele functie komt overeen met de opgegeven naam en argumenttypes

Uw functie heeft een aantal smallint parameters.
Maar in de aanroep gebruikt u numerieke letterlijke waarden waarvan wordt aangenomen dat ze van het type integer zijn .

Een letterlijke tekenreeks of tekenreeksconstante ('123' ) wordt niet meteen getypt. Het blijft type "onbekend" totdat het expliciet wordt toegewezen of gegoten.

Echter, een numerieke letterlijke of numerieke constante wordt onmiddellijk getypt. De handleiding:

Een numerieke constante die noch een decimaalteken noch een exponent bevat, wordt aanvankelijk verondersteld van het type integer te zijn als de waarde past in type integer (32 bits); anders wordt aangenomen dat het typebigint . is als de waarde past in type bigint (64 bits); anders is het type numeric . Constanten die decimale punten en/of exponenten bevatten, worden aanvankelijk altijd verondersteld van het type numeric te zijn .

Zie ook:

  • PostgreSQL ERROR:functie to_tsvector(karakter variërend, onbekend) bestaat niet

Oplossing

Expliciete casts toevoegen voor de smallint parameters of geef geciteerde (niet-getypte) letterlijke waarden door.

Demo

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

Onjuiste oproep:

SELECT * FROM f_typetest(1);

Correcte oproepen:

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

db<>viool hier
Oude sqlfiddle.



  1. MySQL REGEXP-voorbeelden

  2. Retourneer alle niet-berekende kolommen uit een tabel in SQL Server

  3. JSON_QUERY() Voorbeelden in SQL Server (T-SQL)

  4. Opgeslagen procedure uitvoeren vanuit Laravel