Um mehrere Felder aus verschiedenen Tabellen als einen einzelnen Datensatz in PL/pgSQL zurückzugeben, muss ein benutzerdefinierter Datensatz mit erstellt werden die gewünschte Feldzusammensetzung. So erreichen Sie dies:
Definieren Sie einen Datensatztyp mithilfe der CREATE TYPE-Anweisung, um die Felder und ihre Datentypen anzugeben:
CREATE TYPE my_record_type AS ( field1 text, field2 integer, field3 boolean );
Verwenden Sie im SP die DECLARE-Anweisung, um eine Variable des Datensatztyps zu deklarieren und diese zu füllen Felder:
DECLARE result my_record_type; BEGIN SELECT field1, field2, field3 INTO result FROM table1; -- Retrieve and populate additional fields from other tables RETURN result; END
Um mehrere Zeilen aus einer Tabelle abzurufen und sie in einem einzigen Datensatz zusammenzufassen, sollten Sie die Verwendung einer Unterabfrage in Betracht ziehen. Um beispielsweise Zeilen aus der Benutzertabelle abzurufen und zu reduzieren:
DECLARE result my_record_type; BEGIN SELECT id, name FROM ( SELECT id, name FROM user WHERE school_id = InputSchoolId LIMIT 2 ) AS subquery INTO result; RETURN result; END
Nachdem Sie die Funktion definiert haben, rufen Sie sie auf, um den Datensatz abzurufen:
SELECT get_object_fields('name') AS record_output;
Das Ergebnis ist ein Datensatz, der die Felder aus den angegebenen Tabellen enthält.
Bei der Verwendung Von CREATE TYPE für polymorphe Ergebnisse wird abgeraten. Für mehr Flexibilität können Sie den RECORD-Typ nutzen. Zum Beispiel:
CREATE FUNCTION test_ret(a text, b text) RETURNS RECORD AS $$ DECLARE result RECORD; BEGIN IF LENGTH(a) < LENGTH(b) THEN result = (TRUE, (a || b)::text, 'a shorter than b'::text); ELSE result = (FALSE, (b || a)::text, NULL::text); END IF; RETURN result; END;$$ LANGUAGE plpgsql;
Dies ermöglicht die Rückgabe von Datensätzen mit unterschiedlicher Anzahl von Spalten.
Das obige ist der detaillierte Inhalt vonWie kann ich mit PL/pgSQL Datensatzfelder aus mehreren PostgreSQL-Tabellen abrufen und kombinieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!