sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres-funktionen returnerar tabell som inte returnerar data i kolumner

För att få enskilda kolumner istället för radtypen, anropa funktionen med:

SELECT * FROM testfunction();

Precis som du skulle välja alla kolumner från en tabell.
Tänk även på denna granskade form av din 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$;

I synnerhet:

DECLARE nyckelord behövs bara en gång.

Undvik att deklarera parametrar som redan (implicit) är deklarerade som OUT parametrar i RETURNS TABLE (...) klausul.

Använd inte CaMeL-case-identifierare utan citat i Postgres. Det fungerar, identifierare utan citat skrivs till gemener, men det kan leda till förvirrande fel. Se:

  • Är PostgreSQL-kolumnnamn skiftlägeskänsliga?

Den tillfälliga tabellen i exemplet är helt värdelös (förmodligen överförenklad). Exemplet som ges kokar ner till:

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


  1. Duplicera rader i en primärnyckeltabell.

  2. Hur man formaterar siffror i MySQL

  3. Så här fixar du "Ogiltigt objektnamn 'OPENJSON'." i SQL Server

  4. OLTP-prestanda sedan PostgreSQL 8.3