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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB