PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Żadna funkcja nie pasuje do podanej nazwy i typów argumentów

Twoja funkcja ma kilka smallint parametry.
Ale w wywołaniu używasz literałów numerycznych, które przypuszczalnie są typu integer .

Literał ciągu lub stała ciąg ('123' ) nie jest wpisywany od razu. Pozostaje wpisz „nieznane”, dopóki nie zostanie przypisane lub rzucone jawnie.

Jednak literał numeryczny lub stała numeryczna jest wpisywany natychmiast. Instrukcja:

Stała numeryczna, która nie zawiera ani kropki dziesiętnej, ani wykładnika, jest początkowo integer jeśli jego wartość mieści się w typie integer (32 bity); w przeciwnym razie zakłada się, że jest to typbigint jeśli jego wartość mieści się w typie bigint (64 bity); w przeciwnym razie należy wpisać numeric . Zawsze początkowo zakłada się, że stałe zawierające kropki dziesiętne i/lub wykładniki są typu numeric .

Zobacz także:

  • BŁĄD PostgreSQL:funkcja to_tsvector(znak zmienny, nieznany) nie istnieje

Rozwiązanie

Dodaj wyraźne rzutowania dla smallint parametry lub przekaż cytowane (bez typu) literały.

Demo

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

Nieprawidłowe połączenie:

SELECT * FROM f_typetest(1);

Prawidłowe połączenia:

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

db<>graj tutaj
Stary sqlfiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Krok po kroku postgres_fdw

  2. Jak posortować wynik z string_agg()

  3. Przegląd narzędzi do planowania zadań dla PostgreSQL

  4. Zresetuj licznik automatycznego przyrostu w postgresie

  5. django.db.utils.ProgrammingError:relacja już istnieje