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

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';
quand je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select meilleur_societe(2007, 5, 8, 444) as blob;
j'ai :
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