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

Requêtes PostgreSQL Discussion :

retourner des colonnes de deux tables


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Par défaut retourner des colonnes de deux tables
    Bonsoir tout le monde,
    Je débute avec Postgres, j'ai une base de données où on gère des associations qui proposent des sports.

    Je dois effectuer une requête sur trois tables :

    <entreprise> ---<adherent>---<association>

    Je veux afficher les adhérents d'une association donnée (en paramètre) avec les entreprises des adhérents s'ils en ont une.
    Mon problème c'est que je ne sais pas comment retourner les données de la table entreprise. J'ai chercher sur le net.. mais trouvé de solution. J'ai une idée..peut-être utiliser une vue..
    Ma fonction est :

    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
    CREATE OR REPLACE FUNCTION afficher_adh(une_assoc integer)
                returns SETOF adherent AS $$
                DECLARE
                ligne adherent%rowtype;
     
                BEGIN
                for ligne in SELECT adherent.*,entreprise.* FROM entreprise 
                    LEFT OUTER JOIN adherent on entreprise.id_entreprise = adherent.fk_entreprise
                    LEFT OUTER JOIN association on adherent.fk_association= association.id_association 
                    WHERE association.id_association = une_assoc loop
     
                    return next ligne;
                    end loop;
                    return;
     
                END;
                $$ 
                LANGUAGE plpgsql
    Voila, si quelqu'un peut me donner un indice ce serai gentil. Merci d'avance !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Pourquoi faire une fonction au lieu d'une simple requête?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Pourquoi faire une fonction au lieu d'une simple requête?
    C'est pour pouvoir réutiliser la fonction...
    En faite, mon problème c'est : returns setoff ....
    comment on peut mettre 2 types a retourner sans utiliser un tableau ?
    Je sais pas si ça pourrai fonctionner avec une vue..

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Effectivement la fonction ne peut pas renvoyer deux types distincts.
    Elle pourrait renvoyer SET OF RECORD mais ça obligerait l'appelant à lui faire correspondre une liste de définition de colonnes, ce qui n'est sûrement pas le but recherché ici.

    Il est possible de faire une vue, sur la base de la requête montrée dan la fonction, en enlevant la clause WHERE.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Effectivement la fonction ne peut pas renvoyer deux types distincts.
    Elle pourrait renvoyer SET OF RECORD mais ça obligerait l'appelant à lui faire correspondre une liste de définition de colonnes, ce qui n'est sûrement pas le but recherché ici.

    Il est possible de faire une vue, sur la base de la requête montrée dan la fonction, en enlevant la clause WHERE.
    Mais le problème reste, comment retourner le nom d'une entreprise et le nom d'un adhérent

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Bonjour,

    peut-etre ceci pourrait t'aider:

    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
     
    CREATE TYPE adherent AS(nom text, entreprise text );
     
    CREATE OR REPLACE FUNCTION "public"."get_adherents" () RETURNS setof adherent AS
    $BODY$
    DECLARE
      returnrec adherent;
    BEGIN
        FOR returnrec IN SELECT 'toto','EDF' union SELECT 'tata','GDF' union SELECT 'titi','Pôle emploi' LOOP
            RETURN NEXT returnrec;
        END LOOP;
    END;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;
     
     
    select * from get_adherents();
    C'est à adapter avec ta requête dans la fonction, mais bon...

    Kaoualeo

Discussions similaires

  1. Comparaison des colonnes de deux tables différentes
    Par Chakalaka dans le forum PL/SQL
    Réponses: 11
    Dernier message: 22/11/2011, 17h27
  2. [D-7][PostGres]Récuperer l'ensemble des colonnes d'une table
    Par Escandil dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/10/2005, 09h17
  3. [VB.NET] DataGrid : titre des colonnes sur deux lignes
    Par Lahouari dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/12/2004, 14h44
  4. [JDBC]Nom des colonnes d'une table
    Par Guybrush dans le forum JDBC
    Réponses: 6
    Dernier message: 08/09/2004, 18h28
  5. [Firebird 1.5] nom des colonnes d'une table
    Par c0rwyn dans le forum SQL
    Réponses: 4
    Dernier message: 03/09/2004, 14h44

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