PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

La fonction Postgres renvoyant la table ne renvoyant pas de données dans les colonnes

Pour obtenir des colonnes individuelles au lieu du type de ligne, appelez la fonction avec :

SELECT * FROM testfunction();

Tout comme vous sélectionneriez toutes les colonnes d'un tableau.
Considérez également cette forme révisée de votre fonction de test :

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$;

En particulier :

Le DECLARE le mot clé n'est nécessaire qu'une seule fois.

Évitez de déclarer des paramètres qui sont déjà (implicitement) déclarés comme OUT paramètres dans le RETURNS TABLE (...) clause.

N'utilisez pas d'identificateurs de cas CaMeL sans guillemets dans Postgres. Cela fonctionne, les identifiants sans guillemets sont convertis en minuscules, mais cela peut entraîner des erreurs déroutantes. Voir :

  • Les noms de colonne PostgreSQL sont-ils sensibles à la casse ?

La table temporaire dans l'exemple est complètement inutile (probablement trop simplifiée). L'exemple tel qu'il est donné se résume à :

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