J'ai une fonction qui renvoie deux paramètres en tant que type composite anonyme via Paramètres de sortie .
Je peux accéder aux colonnes individuelles avec une requête comme celle-ci: P>
firstname | lastname | guess_user -----------+-----------+--------------- Angela | Abbott | (0.285714,3) Amy | Allan | (0.285714,4) Annette | Allison | (0.285714,5) Annie | Ashworth | (0.285714,6) Amanda | Baird | (0.285714,7)
5 Réponses :
Vous devez modifier votre fonction pour renvoyer un ensemble < / a> - Le dernier exemple est identique à la fonctionnalité que vous demandez. p>
Retourne SetOf Enregistrer Code> Pour indiquer que la fonction renvoie plusieurs lignes au lieu d'une seule. Ils ne sont pas liés à une table existante, vous pouvez renvoyer un type code> si vous préférez. wiki.postgresql.org/wiki/...
Merci, j'ai donné un aller, mais je ne pouvais toujours pas sembler mettre la fonction au bon endroit pour le faire fonctionner. Cette page: Depesz.com/index.php/2008/11/03/... semble suggérer que c'est une limitation de Postgres, qui est résolue sur 8.4 (je cours 8.3.8).
Sauf si quelqu'un ne me ferme pas et me corrige, je pense que la réponse est que ce n'est actuellement pas possible dans 8.3 mais peut être fait à Postgres 8.4. P>
Faites-le simplement comme ça:
select firstname, lastname, x.confidence, x.matchid from ( select firstname, lastname, guess_user(firstname, lastname) as x from users limit 5 ) q;
Vous devez utiliser des parenthèses pour accéder aux champs de type composite: Sélectionnez FirstName, Nom, (x) .Confidence, (x) .Matchid Sinon, obtenez cette erreur: «Entrée de clause manquante pour la table" x ""
Vous devrez peut-être entre parenthésiser la solution de «X» dans Depesz, afin de distinguer la valeur d'enregistrement composite d'une table, de sorte que vous n'obtenez pas le message: au moins je fais sur 9.0.2. P> p>
Combinant les réponses de Depesz et Fazal Cela semble fonctionner:
select firstname, lastname, (guess_user(firstname, lastname)).* from users limit 5
Pour ajouter un peu plus d'informations, par postgreSQL.org/docs/9.3/static/ ROWTYPES.HTML "Pour accéder à un champ d'une colonne composite, on écrit un point et le nom de champ, tout comme la sélection d'un champ à partir d'un nom de table. En fait, c'est tellement comme la sélection d'un nom de table que vous avez doivent souvent utiliser des parenthèses à empêcher de dérouler l'analyseur. "
Au cas où il est utile que quiconque souhaitait expérimenter, voici une fonction qui retournera le même type d'enregistrement que celui que j'utilise: Créer ou remplacer la fonction GUESSE_USER (FirstName Varchar, LateName Varchar, Out Confidence Real, Out MatchID Integer) $ Commencer matchid: = 1; confiance: = 0.5; REVENIR; FINIR; $$ langue plpgsql;
Serait-il possible de mettre en œuvre cela comme une vue à la place? développeur.postgresql.org/pgdocs/postgres/sql-creeview.htmlled/a >