banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

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

 

Pied de page des forums

Powered by FluxBB