Heim >Datenbank >MySQL-Tutorial >PostgreSQL-Fehler 42601: Wie definiere ich Rückgabetypen für Funktionen, die Datensätze zurückgeben, richtig?

PostgreSQL-Fehler 42601: Wie definiere ich Rückgabetypen für Funktionen, die Datensätze zurückgeben, richtig?

Barbara Streisand
Barbara StreisandOriginal
2025-01-05 13:51:40752Durchsuche

PostgreSQL Error 42601: How to Correctly Define Return Types for Functions Returning Records?

PostgreSQL: FEHLER: 42601: Für Funktionen, die „Datensatz“ zurückgeben, ist eine Spaltendefinitionsliste erforderlich

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.

Problem

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.

Lösung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn