J'ai le code suivant pour renvoyer plusieurs valeurs de PL / Python:
column, column2 egg, 4
4 Réponses :
Ouais, la syntaxe pour cela est un peu loufaie, nécessitant des parenthèses supplémentaires: pour obtenir plusieurs composants de la sortie tout en invoquant uniquement la fonction une fois, vous pouvez utiliser une sous-sélection. : p>
Votre code fonctionne, mais ai-je vraiment besoin d'une sous-sélection pour faire cela? J'étais tellement proche de make_pair ('Egg', 4) Nom, mais cela n'a pas fonctionné.
Vous pouvez dire SELECT (Make_Pair ('Egg', 4)). Nom code>, par exemple. Si vous souhaitez les deux composants mais seulement pour exécuter la fonction une fois, je pense que vous avez besoin de la sous-sélection. Je vais mettre à jour la réponse.
Ne pas avoir à exécuter la fonction plus d'une fois est définitivement un objectif.
J'ai ajouté ma propre réponse avec du code de travail pour éviter de devoir exécuter la fonction deux fois et, en même temps, éviter une sous-requête. Je vais toujours accepter votre réponse lorsque vous me le conduisez.
Ce qui suit est le code de travail pour éviter de devoir exécuter la fonction deux fois et, en même temps, évitez une sous-requête.
CREATE TYPE named_value AS ( name text, value integer ); CREATE or replace FUNCTION setcustomvariable(variablename text, variablevalue named_value) RETURNS named_value AS $$ GD[variablename] = variablevalue return variablevalue $$ LANGUAGE plpythonu; CREATE or replace FUNCTION getcustomvariable(variablename text) RETURNS named_value AS $$ return GD[variablename] $$ LANGUAGE plpythonu; CREATE or replace FUNCTION make_pair (name text, value integer) RETURNS named_value AS $$ return [ name, value ] $$ LANGUAGE plpythonu; select setcustomvariable('result', make_pair('egg', 4)), (getcustomvariable('result')).name, (getcustomvariable('result')).value
SELECT name, value FROM make_pair('egg', 4) AS x; SELECT a, b FROM make_pair('egg', 4) AS x(a,b);
C'est une solution très élégante, mais je ne sais pas comment l'utiliser dans mon cas où j'ai besoin d'exécuter la fonction de chaque rangée d'une table. La performance est également très importante pour moi.
Une solution que j'ai trouvée était d'utiliser Join: Ce retour: P> a | b | c | is_it | perimeter
---+----+----+-------+-----------
1 | 2 | 3 | f | 6
3 | 4 | 5 | t | 12
5 | 12 | 13 | t | 30
(3 rows)
Une autre façon d'exprimer la jointure croisée consiste à utiliser rejoindre check_it (A, B, C) sur true code> ou simplement utiliser
croix rejoindre code>.