Annonce
Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.
Vous allez recevoir un message pour effectuer ce changement de mot de passe.
Merci de bien respecter les règles préconisées.
#1 Mon 06 October 2014 13:35
- damika
- Participant occasionnel
- Lieu: Bidart
- Date d'inscription: 3 Aug 2010
- Messages: 33
plpgsql : function returns setof record
Bonjour,
Je possède une fonction qui me retourne 5 éléments d'une table zcodes_journaliers (pour exemple). Je souhaiterais envoyer la table à me retourner en paramètre.
Exemple qui fonctionne que je souhaite modifier :
Code:
CREATE OR REPLACE FUNCTION test() RETURNS SETOF zcodes_journaliers AS $BODY$ DECLARE var_query text; var_select record; BEGIN var_query='select * from zcodes_journaliers limit 5'; FOR var_select IN execute var_query LOOP RETURN NEXT var_select; END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsql STABLE STRICT COST 100 ROWS 1000;
Je voudrais mettre en paramètre le nom de la table :
Code:
CREATE OR REPLACE FUNCTION test(tablename text) RETURNS SETOF record AS $BODY$ DECLARE var_query text; var_select record; BEGIN var_query='select * from '||tablename||' limit 5'; FOR var_select IN execute var_query LOOP RETURN NEXT var_select; END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsql STABLE STRICT COST 100 ROWS 1000;
J'ai aussi tenté quelque chose du genre :
Code:
CREATE OR REPLACE FUNCTION test(tablename text) RETURNS SETOF record AS $BODY$ DECLARE var_query text; BEGIN var_query='select * from '||tablename||' limit 5'; RETURN QUERY EXECUTE var_query; END; $BODY$ LANGUAGE plpgsql STABLE STRICT COST 100 ROWS 1000;
Pour les 2, si je teste :
Code:
select test('zcodes_journaliers'); ----------------------------------------------------------------------- ERROR: set-valued function called in context that cannot accept a set CONTEXT: PL/pgSQL function "test" line 6 at RETURN QUERY
Ma demande est-elle réalisable?
Je ne maitrise pas vraiment les retours de type RECORD, j'ai l'impression de faire fausse route...
Cordialement
Hors ligne
#2 Mon 06 October 2014 15:10
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1538
Re: plpgsql : function returns setof record
Bonjour,
Essayez select * from test('zcodes_journaliers');
Avec un type record, vous aurez a qualifier le nom des colonnes retournées par la fonction:
select * from test('zcodes_journaliers') as (col1 type, col2 type, etc...)
Nicolas
Hors ligne
#3 Mon 06 October 2014 15:20
- damika
- Participant occasionnel
- Lieu: Bidart
- Date d'inscription: 3 Aug 2010
- Messages: 33
Re: plpgsql : function returns setof record
Ro MERCI!
Hors ligne