sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres-funktion returnerer tabel returnerer ikke data i kolonner

For at få individuelle kolonner i stedet for rækketypen skal du kalde funktionen med:

SELECT * FROM testfunction();

Ligesom du ville vælge alle kolonner fra en tabel.
Overvej også denne gennemgåede form for 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$;

Især:

DECLARE nøgleord er kun nødvendigt én gang.

Undgå at erklære parametre, der allerede (implicit) er erklæret som OUT parametre i RETURNS TABLE (...) klausul.

Brug ikke uciterede CaMeL-case-id'er i Postgres. Det virker, identifikatorer uden anførselstegn castes til små bogstaver, men det kan føre til forvirrende fejl. Se:

  • Er PostgreSQL-kolonnenavne skelne mellem store og små bogstaver?

Den midlertidige tabel i eksemplet er fuldstændig ubrugelig (sandsynligvis forsimplet). Eksemplet som givet bunder i:

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


  1. Sådan forbinder du en database til Python

  2. Hvad er nyt i MySQL Galera Cluster 4.0

  3. tom streng i orakel

  4. Er Intel dømt i serverens CPU-plads?