J'ai écrit une fonction récursive et en fonction de la sortie, j'ai besoin de sélectionner différents champs. Ma question est maintenant, comment puis-je faire cela plusieurs fois sans avoir à appeler la fonction plus d'une fois? Ce que je fais en ce moment, c'est simplement d'utiliser la condition CASE WHEN...
et de vérifier à chaque fois ce que les fonctions retournent. (Ceci est seulement un code pseudo et ne fait rien de réel, il est juste pour la compréhension)PostgreSQL Sélections conditionnelles
SELECT
id,
(CASE WHEN (function(id) > 0)
THEN field1
ELSE field2
END) as value1,
(CASE WHEN (function(id) > 0)
THEN field3
ELSE field4
END) as value2,
(CASE WHEN (function(id) > 0)
THEN field5
ELSE field6
END) as value3
FROM table1
...
Comment puis-je optimiser cette requête et appeler la fonction qu'une seule fois? Merci d'avance!
Quelle est la langue de la fonction? –
La langue est PL/pgSQL. – stefita
Il est étrange que vous ayez accepté la réponse pour utiliser IMMUTABLE mais vous dites dans un commentaire que votre fonction "sélectionne une valeur d'une autre table et qu'elle pourrait être changée pour cet identifiant particulier". J'espère que vous n'avez pas marqué cette fonction IMMUTABLE puisque Postgres ne dit pas combien de temps il met en cache le résultat d'une fonction immuable. –