sql >> Database teknologi >  >> RDS >> PostgreSQL

Ingen funktion matcher det angivne navn og argumenttyper

Din funktion har et par smallint parametre.
Men i opkaldet bruger du numeriske bogstaver, der formodes at være typen integer .

En strengliteral eller strengkonstant ('123' ) skrives ikke med det samme. Det forbliver typen "ukendt", indtil det tildeles eller castes eksplicit.

Dog en numerisk bogstavelig eller numerisk konstant tastes med det samme. Manualen:

En numerisk konstant, der hverken indeholder et decimaltegn eller en aneksponent, antages oprindeligt at være typen integer hvis dens værdi passer til typen integer (32 bit); ellers formodes det at være typebigint hvis dens værdi passer ind i typen bigint (64 bit); ellers antages det at være type numeric . Konstanter, der indeholder decimaltegn og/eller eksponenter, antages altid i første omgang at være typen numeric .

Se også:

  • PostgreSQL FEJL:funktion to_tsvector (tegn varierende, ukendt) findes ikke

Løsning

Tilføj eksplicitte casts til smallint parametre eller bestå citerede (utypede) bogstaver.

Demo

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

Forkert opkald:

SELECT * FROM f_typetest(1);
 

Korrekte opkald:

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

db<>spil her
Gamle sqlfiddle.



  1. Hvordan tager man backup af en enkelt tabel i en MySQL-database?

  2. Udvidelse af brugen af ​​DBCC CLONEDATABASE

  3. Hvordan date_part() virker i PostgreSQL

  4. Undgå at gemme ændringer, der kræver, at tabellen genskabes negative effekter