FEHLER: Funktionsaufruf-Konflikt und Argumenttypumwandlung
In Ihrem Code stoßen Sie auf den Fehler: „FEHLER: Funktion ... funktioniert nicht.“ nicht vorhanden und HINWEIS: Keine Funktion entspricht dem angegebenen Namen und den angegebenen Argumenttypen. Dieser Fehler entsteht durch eine Diskrepanz zwischen der Funktionsdefinition und den beim Aufruf übergebenen Argumenten.
Insbesondere hat Ihre Funktion, FnUpdateSalegtab09, mehrere Parameter, die als „smallint“-Datentyp deklariert sind. Wenn Sie die Funktion jedoch aufrufen, übergeben Sie numerische Literale (z. B. „12“) als Argumente für diese Parameter.
Typumwandlungsproblem
PostgreSQL geht von numerischen Literalen aus standardmäßig ohne Dezimalpunkte oder Exponenten als Typ „Ganzzahl“. Die Parameter in Ihrer Funktion sind jedoch als „smallint“ definiert, was einem Bereich von -32768 bis 32767 entspricht. Die Übergabe eines ganzzahligen Werts ohne explizite Umwandlung über diesen Bereich hinaus kann zu Datenkürzungen oder Fehlern führen.
Lösung
Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:
1. Explizite Typumwandlung im Funktionsaufruf:
Sie können die numerischen Literale im Funktionsaufruf mithilfe der Syntax „::smallint“ explizit in „smallint“ umwandeln. Zum Beispiel:
select FnUpdateSalegtab09 (4, 1, 0, 12, 1::smallint, '9'::varchar,....
2. Untypisierte Literale übergeben:
Alternativ können Sie untypisierte String-Literale im Funktionsaufruf verwenden. PostgreSQL leitet dann anhand der Funktionsparameter den richtigen Datentyp ab. Schließen Sie dazu das numerische Literal in einfache Anführungszeichen ein:
select FnUpdateSalegtab09 (4, 1, 0, 12, '1':: smallint,....
Beispiel
Betrachten Sie den folgenden korrigierten Funktionsaufruf:
select FnUpdateSalegtab09 (4, 1, 0, 12::smallint, 1, '9'::varchar,....
Dieser Aufruf wandelt das ganzzahlige Literal „12“ explizit in „smallint“ um und stellt so sicher, dass die Funktionsparameter mit den erwarteten Daten übereinstimmen Typen.
Das obige ist der detaillierte Inhalt vonPostgreSQL-Funktionsaufruffehler: Wie behebt man „Funktion ... existiert nicht' aufgrund einer Typinkongruenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!