Heim >Datenbank >MySQL-Tutorial >PostgreSQL-Fehler 42601: Wie definiere ich Rückgabetypen für Funktionen, die Datensätze zurückgeben, richtig?
Dieser Fehler tritt auf, wenn eine Funktion erstellt wird, die einen Datensatz zurückgibt, ohne einen bereitzustellen Spaltendefinitionsliste. In diesem Artikel wird das Problem erläutert und eine Lösung zur Behebung des Fehlers bereitgestellt.
In PostgreSQL erfordern Funktionen, die Datensätze zurückgeben, eine Spaltendefinitionsliste, in der die Namen und Datentypen der Spalten explizit angegeben werden im zurückgegebenen Datensatz. Der in der Frage bereitgestellte Code versucht jedoch, einen Datensatz zurückzugeben, ohne die Spalten zu definieren, was zu der Fehlermeldung „Spaltendefinitionsliste ist erforderlich“ führt.
Um den Fehler zu beheben, benötigen Sie um eine Spaltendefinitionsliste für den Rückgabetyp der Funktion bereitzustellen. Dies kann mit dem Schlüsselwort RETURNS erfolgen. Hier ist zum Beispiel eine korrigierte Version der Funktion:
CREATE OR REPLACE FUNCTION get_user_by_username( username varchar(250), online boolean ) RETURNS TABLE ( user_id int, user_name varchar(250), last_activity timestamptz ) AS $$ BEGIN IF online THEN UPDATE users SET last_activity = current_timestamp WHERE user_name = username; END IF; RETURN QUERY SELECT user_id, user_name, last_activity FROM users WHERE user_name = username LIMIT 1; END; $$ LANGUAGE plpgsql;
In diesem Code gibt die RETURNS TABLE-Anweisung die Spaltennamen und Datentypen des Datensatzes an, der von der Funktion zurückgegeben werden soll.
Alternativ können Sie die Verwendung einer Spaltendefinitionsliste vermeiden, indem Sie eine oder mehrere ganze Zeilen einer vorhandenen Tabelle zurückgeben. Beispiel:
CREATE OR REPLACE FUNCTION get_user_by_username( username varchar(250), online boolean ) RETURNS SETOF users AS $$ BEGIN IF online THEN RETURN QUERY UPDATE users SET last_activity = current_timestamp WHERE user_name = username RETURNING *; ELSE RETURN QUERY SELECT * FROM users WHERE user_name = username; END IF; END; $$ LANGUAGE plpgsql;
In diesem Fall gibt die RETURNS SETOF-Benutzeranweisung an, dass die Funktion eine Reihe von Zeilen der Benutzertabelle zurückgibt, die bereits über die erforderlichen Spaltendefinitionen verfügt.
Stellen Sie sicher, dass die Spaltendefinitionen mit der tatsächlichen Tabellenstruktur übereinstimmen, um Fehler oder unerwartetes Verhalten zu vermeiden.
Das obige ist der detaillierte Inhalt vonPostgreSQL-Fehler 42601: Wie definiere ich Rückgabetypen für Funktionen, die Datensätze zurückgeben, richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!