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;
BEGINFOR 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