PostgreSQL La base de donnees la plus sophistiquee au monde.

Récupérer le résultat d'une requête exé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 procédure 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 résultats on sélectionne la procédure ainsi :

SELECT * FROM  ma_fonction();

Les mots importants sont :

  • setof
  • record
  • %TYPE et %ROWTYPE
  • for…loop
  • return next


loquace le 07/06/2007

 
support/trucs_et_astuces/recuperer_le_resultat_d_une_requete_executee_dans_une_procedure_stockee.txt · Dernière modification : 2008/10/15 16:58 de ioguix