IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

pb fonction plpgsql qui renvoi SETOF record


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 49
    Points
    49
    Par défaut pb fonction plpgsql qui renvoi SETOF record
    Bonjour, voilà je cherche à faire une fonction plpgsql qui renvoi un liste d'enregistrement qui serront traiter par une autre fonction "générique".

    La premiere étant pour renvoyé la liste des société avec leur nombre total de connexion sur une période donner.

    La seconde donne la liste des 10 meilleurs (générique car elle poura faire la même chose avec les marques, etc.. utilisé dans la base)


    Seulement voilà je n'arrive déjà pas à faire la première correctement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    create or replace function meilleur_societe(integer, integer, integer, integer) returns setof record
    as
    $$
    declare
    annee alias for $1;
    mois1 alias for $2;
    mois2 alias for $3;
    soc_id alias for $4;
    liste record;
    begin
    for liste in select stats_soc_id as ID, sum(stats_soc_val) as TOT
    	from stats_societe
    	where extract(month from stats_soc_periode) between mois1 and mois2
    	and extract(year from stats_soc_periode) = annee
    	and stats_soc_id <> soc_id
    	group by stats_soc_id
    loop
    	return next liste;
    end loop;
    return;
    end;
    $$
    language'plpgsql';
    quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select meilleur_societe(2007, 5, 8, 444) as blob;
    j'ai :
    ERROR: set-valued function called in context that cannot accept a set
    État SQL :0A000
    Contexte : PL/pgSQL function "meilleur_societe" line 15 at return next


    par contre si je fais la "requete" SQL directement avec les paramètres (hors fonction donc) j'ai bien ce que je veux.

    Mon pb est donc que je ne sais pas comment renvoyer un record de 1 ou plusieur ligne correctement.


    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    question classique.

    A partir du moment où une procédure stockée renvoie un jeu d'enregistrement, elle est considérée comme une table d'un point de vue SQL. En conséquence, on la trouve dans la clause FROM de la requête SQL. D'autre part, du fait qu'elle renvoie un type RECORD générique, il faut indiquer le type et le nom des champs renvoyés (les noms ne sont pas obligés de concorder avec ceux utilisés dans la fonction, par contre les types doivent être compatibles). Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM meilleur_societe(2007, 5, 8, 444) AS (id integer, tot integer);
    D'autre part, il était inutile d'utiliser plpgsql pour écrire ta fonction, SQL aurait été suffisant.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 49
    Points
    49
    Par défaut


    merci bien ca marche nikel ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 08/11/2009, 21h41
  2. [Tableaux] Fonction recursive qui renvoie un tableau
    Par lolodev dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2009, 09h47
  3. fonction plpgsql qui fonctionne pas...
    Par Empty_body dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/01/2006, 18h22
  4. Fonction utilisateur qui renvoie la date du jour
    Par falcon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/12/2004, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo