Postgres fonction avec la liste d'argument et à la clause
Comment créer une fonction qui prend comme argument integer[] paramètre et l'exécution de la requête avec la clause avec ce paramètre dans la boucle.
Dans la boucle je veux exécuter ensuite sélectionner et le résultat de cette requête que je voudrais revenir.
Quelque chose comme ça:
CREATE OR REPLACE FUNCTION function_which_i_want(my_argument integer[]) RETURNS my_schema_and_table[] AS
$BODY$
DECLARE
result my_schema_and_table[];
BEGIN
FOR l IN SELECT * FROM table2 WHERE id in (my_argument) LOOP
SELECT * FROM my_schema_and_table;
END LOOP;
END;
...
Je veux obtenir de l'union de chaque sélectionnez dans la boucle. un énorme rejoint résultat.
Est-ce possible? S'il vous plaît aider.
OriginalL'auteur user1756277 | 2012-10-18
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Clodoaldo Neto
Fonctions PL/pgSQL
Combler les lacunes dans votre question, il pourrait ressembler à ceci:
Si vous souhaitez retourner le résultat de
SELECT * FROM my_schema_and_table;
vous devez aller sur cette fonction entière différemment. Déclarer commeRETOURNE SETOF target_table
En supposant que vous voulez vraiment un
SET
de lignes à partir de votretarget_table
, pas un tableau?Réécrire le
de construire à
= (_arr)
. C'est la façon d'utiliser un paramètre de tableau directement. En interne, PostgreSQL réécrit une expression de= ANY()
de toute façon. Test avecEXPLAIN ANALYZE
à voir pour vous-même.Ou utiliser la construction avec
unnest()
et de se joindre à la table obtenue comme @Clodoaldo montre. C'est plus rapide avec de longues tableaux.Simplifier à la plaine de la fonction SQL
Le ci-dessus est encore inutilement artificiel. Simplifier une fonction SQL en faire de même.
Appel:
OriginalL'auteur Erwin Brandstetter