Récupérer le résultat d'une requête éxécutée dans une procédure stockée

En php on peut utiliser directement une requête pour obtenir un recordset.
Cependant si l'on veux récupérer un recordset via une procedure stockée -- pour appliquer des traitements sur des paramètres avant d'exécuter la requête par exemple -- on peut créer une fonction équivalent à celle qui suit.

L'exemple renvoie un setof de la variable out nommée myset et qui est definie du type du champs convoité dans la table. (On utilise %TYPE pour recupérer le type du champs).

CREATE OR REPLACE FUNCTION ma_fonction(out myset ma_table.mon_champ_pk%TYPE)
RETURNS setof integer AS
$BODY$
DECLARE
-- On crée une variable de type record , on peut aussi suivant le besoin créer une variable de type %ROWTYPE
myrecord record;
BEGIN

FOR myrecord in SELECT mon_pk FROM ma_table loop
myset:= myrecord.mon_pk;
RETURN NEXT;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

ALTER FUNCTION ma_fonction(out myset demande.demande_pk%TYPE) OWNER TO mon_user;

Pour récupérer l'ensemble des resultat on selectionne la procedure ainsi:

SELECT * FROM  ma_fonction();

Les mots importants sont :
- setof
- record
- %TYPE et %ROWTYPE
- for...loop
- return next