Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich eine Postgres-Funktion, die eine virtuelle Tabelle mit mehreren Zeilen zurückgibt?

Wie erstelle ich eine Postgres-Funktion, die eine virtuelle Tabelle mit mehreren Zeilen zurückgibt?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-23 02:15:13283Durchsuche

How to Create a Postgres Function Returning a Virtual Table with Multiple Rows?

Zurückgeben einer virtuellen Tabelle von einer Postgres-Funktion

Problem

Sie suchen eine Postgres-Funktion, die eine virtuelle Tabelle mit benutzerdefiniertem Inhalt zurückgibt, die mit einem Unbekannten aufwartet Anzahl der Zeilen und drei Spalten. Sie haben Schwierigkeiten, die richtige Syntax zu finden, und benötigen Hilfe beim Erstellen der Funktion.

Lösung

Verwenden Sie die folgende Syntax, um die gewünschte Funktion zu erstellen:

CREATE OR REPLACE FUNCTION f_foo() -- (open_id numeric) -- parameter not used
  RETURNS TABLE (a int, b int, c int) AS
$func$
BEGIN
RETURN QUERY VALUES
  (1,2,3)
, (3,4,5)
, (3,4,5)
;
END
$func$  LANGUAGE plpgsql IMMUTABLE ROWS 3;

Erklärung

Schlüssel Punkte:

  • RÜCKGABETABELLE: Definiert den Rückgabetyp als Ad-hoc-Zeilentyp.
  • RÜCKGABEABFRAGE: Gibt mehrere Zeilen in einer einzigen zurück Befehl.
  • WERTE: Gibt mehrere Zeilen manuell mit einem Standard-SQL-Ausdruck ein.
  • PARAMETER: Ein nicht verwendeter Parameter (open_id numeric) ist enthalten als ein Beispiel, ist aber optional.
  • KENNZEICHNUNGEN: Doppelte Anführungszeichen sind für rechtliche Bezeichner nicht erforderlich.
  • VOLATILITÄT: IMMUTABLE zeigt an, dass das Ergebnis konstant ist.
  • ZEILEN: Angabe der Anzahl von Zurückgegebene Zeilen (ROWS 3) können die Abfrage unterstützen Planer.

Alternativen:

  • Einfaches SQL: Für einfache Fälle reicht die folgende SQL-Anweisung aus:
VALUES (1,2,3), (3,4,5), (3,4,5)
  • SQL-Funktion: Schließen Sie die Anweisung in eine SQL-Funktion ein:
CREATE OR REPLACE FUNCTION f_foo()
   RETURNS TABLE (a int, b int, c int) AS
$func$
   VALUES (1, 2, 3)
        , (3, 4, 5)
        , (3, 4, 5);
$func$  LANGUAGE sql IMMUTABLE ROWS 3;

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Postgres-Funktion, die eine virtuelle Tabelle mit mehreren Zeilen zurückgibt?. 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