Meine Funktion ist:
%Vor%Und ich habe das so genannt:
%Vor%Der Fehler ist:
%Vor%
Ihre Funktion hat einige smallint
Parameter.
In dem Aufruf verwenden Sie numerische Literale, die vermutlich vom Typ integer
sind.
Ein String-Literal oder String-Konstante ( '123'
) wird nicht sofort eingegeben. Es bleibt Typ "unbekannt" bis zugewiesen oder explizit gegossen.
Jedoch ein numerisches Literal oder numerische Konstante wird sofort eingegeben. Pro Dokumentation:
Eine numerische Konstante, die weder einen Dezimalpunkt noch einen enthält Der Exponent wird zunächst als <%> angenommen, wenn der Wert
integer
ist passt in den Typinteger
(32 Bits); ansonsten wird angenommen, dass es sich um einen Typ handeltbigint
, wenn sein Wert in den Typbigint
(64 Bits) passt; sonst ist es so genommen als Typnumeric
. Konstanten, die Dezimalpunkte und / oder enthalten Exponenten werden immer zuerst als Typnumeric
angenommen.
Weitere Erklärungen und Links in dieser verwandten Antwort:
Fügen Sie explizite Umwandlungen für die smallint
-Parameter hinzu oder zitieren Sie sie.
Falscher Aufruf:
%Vor%Korrekte Anrufe:
%Vor% Dieser Fehler bedeutet, dass ein Funktionsaufruf nur von einer vorhandenen Funktion abgeglichen wird, wenn alle Argumente vom selben Typ sind und in der gleichen Reihenfolge übergeben werden. Also, wenn die nächste f()
-Funktion
wird als
bezeichnet %Vor%Es wird mit
auskommen %Vor% weil es keine Funktion f()
gibt, die eine Ganzzahl als Argument verwendet.
Sie müssen also sorgfältig vergleichen, was Sie an die Funktion übergeben, was erwartet wird. Diese lange Liste von Tabellenspalten sieht wie ein schlechtes Design aus.
Tags und Links postgresql function types casting plpgsql