PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres-Funktion, die eine Tabelle zurückgibt, die keine Daten in Spalten zurückgibt

Um anstelle des Zeilentyps einzelne Spalten zu erhalten, rufen Sie die Funktion auf mit:

SELECT * FROM testfunction();

So wie Sie alle Spalten aus einer Tabelle auswählen würden.
Berücksichtigen Sie auch diese überarbeitete Form Ihrer Testfunktion:

CREATE OR REPLACE FUNCTION testfunction()
  RETURNS TABLE(a int, b int)
  LANGUAGE plpgsql AS
$func$
DECLARE
   _a int := 0;
   _b int := 0;
BEGIN
   CREATE TABLE tempTable AS SELECT _a, _b;
   RETURN QUERY SELECT * FROM tempTable;
   DROP TABLE tempTable;
END
$func$;

Insbesondere:

Das DECLARE Schlüsselwort wird nur einmal benötigt.

Vermeiden Sie es, Parameter zu deklarieren, die bereits (implizit) als OUT deklariert sind Parameter in der RETURNS TABLE (...) Klausel.

Verwenden Sie in Postgres keine CaMeL-Case-IDs ohne Anführungszeichen. Es funktioniert, Bezeichner ohne Anführungszeichen werden in Kleinbuchstaben umgewandelt, aber es kann zu verwirrenden Fehlern führen. Siehe:

  • Beachten Sie bei PostgreSQL-Spaltennamen die Groß-/Kleinschreibung?

Die temporäre Tabelle im Beispiel ist völlig nutzlos (wahrscheinlich zu stark vereinfacht). Das angegebene Beispiel läuft auf Folgendes hinaus:

CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
  LANGUAGE plpgsql AS
$func$
BEGIN
   a := 0;
   b := 0;
END
$func$;