Heim >Datenbank >MySQL-Tutorial >Wie behebt man den PostgreSQL-Fehler 42601: „Für Funktionen, die „Datensatz' zurückgeben, ist eine Spaltendefinitionsliste erforderlich'?
Der Fehler „eine Spalte „Definitionsliste ist für Funktionen erforderlich, die „Datensatz“ zurückgeben““ gibt an, dass einer Funktion, die für die Rückgabe eines Datensatzdatentyps definiert ist, in ihrer Rückgabe die Spaltennamen und Datentypen fehlen Stellungnahme. Um diesen Fehler zu beheben, geben Sie die Spaltendefinitionen in der RETURNING-Klausel an oder verwenden Sie RETURNS SETOF
Wie im folgenden Code gezeigt, können Sie die Spaltennamen und Datentypen in der RETURNING-Klausel definieren:
CREATE OR REPLACE FUNCTION get_user_by_username(_username text , _online bool DEFAULT false) RETURNS TABLE ( user_id int , user_name varchar , last_activity timestamptz ) LANGUAGE plpgsql AS $func$ BEGIN IF _online THEN RETURN QUERY UPDATE users u SET last_activity = current_timestamp -- ts with time zone WHERE u.user_name = _username RETURNING u.user_id , u.user_name , u.last_activity; ELSE RETURN QUERY SELECT u.user_id , u.user_name , u.last_activity FROM users u WHERE u.user_name = _username; END IF; END $func$;
Alternativ können Sie RETURNS SETOF
CREATE OR REPLACE FUNCTION get_user_by_username3(_username text , _online bool DEFAULT false) RETURNS TABLE ( users_row users , custom_addition text ) LANGUAGE plpgsql AS $func$ BEGIN IF _online THEN RETURN QUERY UPDATE users u SET last_activity = current_timestamp -- ts with time zone WHERE u.user_name = _username RETURNING u -- whole row , u.user_name || u.user_id; ELSE RETURN QUERY SELECT u, u.user_name || u.user_id FROM users u WHERE u.user_name = _username; END IF; END $func$;
Das obige ist der detaillierte Inhalt vonWie behebt man den PostgreSQL-Fehler 42601: „Für Funktionen, die „Datensatz' zurückgeben, ist eine Spaltendefinitionsliste erforderlich'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!