Bonjour, voilà je cherche à faire une fonction plpgsql qui renvoi un liste d'enregistrement qui serront traiter par une autre fonction "générique".
La premiere étant pour renvoyé la liste des société avec leur nombre total de connexion sur une période donner.
La seconde donne la liste des 10 meilleurs (générique car elle poura faire la même chose avec les marques, etc.. utilisé dans la base)
Seulement voilà je n'arrive déjà pas à faire la première correctement![]()
quand je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 create or replace function meilleur_societe(integer, integer, integer, integer) returns setof record as $$ declare annee alias for $1; mois1 alias for $2; mois2 alias for $3; soc_id alias for $4; liste record; begin for liste in select stats_soc_id as ID, sum(stats_soc_val) as TOT from stats_societe where extract(month from stats_soc_periode) between mois1 and mois2 and extract(year from stats_soc_periode) = annee and stats_soc_id <> soc_id group by stats_soc_id loop return next liste; end loop; return; end; $$ language'plpgsql';
j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select meilleur_societe(2007, 5, 8, 444) as blob;
ERROR: set-valued function called in context that cannot accept a set
État SQL :0A000
Contexte : PL/pgSQL function "meilleur_societe" line 15 at return next
par contre si je fais la "requete" SQL directement avec les paramètres (hors fonction donc) j'ai bien ce que je veux.
Mon pb est donc que je ne sais pas comment renvoyer un record de 1 ou plusieur ligne correctement.
Merci pour votre aide
Partager