#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: 1554
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