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 :

Problème dans une procedure


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut [Résolu]Problème dans une procedure
    Bonjour,

    Suite à un précedent post, je suis passé par une procedure stocké pour obtenir une table qui contient ce que je souhaite. Voici le code :
    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
    24
    25
    26
     
    DECLARE
    var_centre ALIAS FOR $1;
    var_categorie ALIAS FOR $2;
    var_result type_stata_gpcat%ROWTYPE;
    i integer;
    BEGIN
     
    FOR i IN 1..7 LOOP
    var_result.categorie := i;
     
    SELECT COUNT(choix_periode) INTO var_result.nbr_annuel FROM TBL_ACTIVITE A, TBL_INSCRIPTION TI WHERE TI.code_activite=A.code_activite AND A.categorie=i AND choix_periode='annuel';
     
    SELECT COUNT(choix_periode) INTO var_result.nbr_s1 FROM TBL_ACTIVITE A, TBL_INSCRIPTION TI WHERE TI.code_activite=A.code_activite AND A.categorie=i AND choix_periode='semestre 1';
     
    SELECT COUNT(choix_periode) INTO var_result.nbr_s2 FROM TBL_ACTIVITE A, TBL_INSCRIPTION TI WHERE TI.code_activite=A.code_activite AND A.categorie=i AND choix_periode='semestre 2';
     
    SELECT count(*) INTO var_result.nbr_desinscrit FROM TBL_ACTIVITE A, TBL_INSCRIPTION TI WHERE TI.code_activite=A.code_activite AND A.categorie=i AND desinscription=TRUE;
     
    SELECT sum(prix_inscription) INTO var_result.recette FROM TBL_ACTIVITE A, TBL_INSCRIPTION TI WHERE TI.code_activite=A.code_activite AND A.categorie=i;
     
    RETURN NEXT var_result;
    END LOOP;
     
    RETURN;
    END;
    Cette fonction a été réalisé sous phppgadm. avec comme argument :
    Valeur de sortie
    langage : plpgsql

    Mais je comprends pas pourquoi j'obtiens l'erreur suivante :

    Erreur SQL :
    ERROR: set-valued function called in context that cannot accept a set
    CONTEXT: PL/pgSQL function "fnc_stata_gpcat" line 21 at return next

    In statement:
    select fnc_stata_gpcat(1,1);
    Pour information, voici mon type type_stata_gpcat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TYPE type_stata_gpcat AS( 
    categorie integer, 
    nbr_annuel integer, 
    nbr_s1 integer,
    nbr_s2 integer,
    nbr_desinscrit integer,
    recette double precision
    );
    Si qq pouvais me donner un coup de mais pour comprendre et corriger mon erreur....

    Merci d'avance.

    A+

  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,

    ta procédure stockée est correcte, c'est la requête qui y fait appel qui ne l'est pas. Les fonctions de type setof doivent se trouver dans la clause FROM de la requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM fnc_stata_gpcat(1,1);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Youpi !

    Merci beaucoup GrandFather. Je vais pouvoir (ou devoir) bosser ce dimanche ;-)

    Bonne journée
    A+

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

Discussions similaires

  1. Problème de date dans une procedure
    Par travanca dans le forum IHM
    Réponses: 8
    Dernier message: 22/04/2013, 09h25
  2. Réponses: 3
    Dernier message: 11/03/2013, 16h04
  3. Réponses: 1
    Dernier message: 25/01/2013, 17h25
  4. Réponses: 5
    Dernier message: 27/12/2007, 00h20
  5. Problème avec 2 blocs IF dans une procedure
    Par asgard dans le forum Delphi
    Réponses: 14
    Dernier message: 13/01/2007, 04h07

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