sql >> Databáze >  >> RDS >> PostgreSQL

Zadanému názvu a typům argumentů neodpovídá žádná funkce

Vaše funkce má několik smallint parametry.
Ve volání však používáte číselné literály, o kterých se předpokládá, že jsou typu integer .

Řetězcový literál nebo řetězcová konstanta ('123' ) se nezadá okamžitě. Zůstává typu „unknown“, dokud není přiřazen nebo explicitně odeslán.

Nicméně číselný literál nebo číselná konstanta je napsáno okamžitě. Manuál:

Číselná konstanta, která neobsahuje desetinnou čárku ani exponent, se zpočátku považuje za typ integer pokud se jeho hodnota vejde do typu integer (32 bitů); jinak se předpokládá, že jde o typbigint pokud se jeho hodnota vejde do typu bigint (64 bitů); jinak to bude typ numeric . Konstanty, které obsahují desetinné čárky a/orexponenty, se vždy zpočátku považují za typ numeric .

Viz také:

  • CHYBA PostgreSQL:funkce to_tsvector(znak různý, neznámý) neexistuje

Řešení

Přidejte explicitní přetypování pro smallint parametry nebo předat literály v uvozovkách (bez typu).

Ukázka

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

Nesprávný hovor:

SELECT * FROM f_typetest(1);

Správná volání:

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

db<>zde hrajte
Starý sqlfiddle.



  1. Lepší techniky pro ořezávání úvodních nul v SQL Server?

  2. Vytváření funkcí v phpMyAdmin - Chyba:přístup odepřen, pro tuto operaci potřebujete super oprávnění

  3. SQL Server – transakce se vrátí při chybě?

  4. Jak změnit prioritu pro souběžný program