#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 QUERYMa 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: 1566
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


