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

SQL Oracle Discussion :

[XMLAgg] Requête imbriqué


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Par défaut [XMLAgg] Requête imbriqué
    Bonsoir.

    J'ai deux tables DOMAINE et COMPETENCE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    COMPETENCE :
      idCompetence
      descriptif
      domComp
    DOMAINE :
      idDomaine
      descriptif
    Une competence appartient à un domaine (ici domComp correspond à idDomaine)

    Je souhaite avoir un résultat comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <domain name="idDomaine">
       <description>Domaine.descriptif</description>
       <competence name="idCompetence1">
          <description>Competence.descriptif1</description>
       </competence>
       <competence name="idCompetence2">
          <description>Competence.descriptif2</description>
       </competence>
    </domain>
    Le problème que je bloque à l'imbrication de mes Select. Pour l'instant j'ai fait cela en me basant sur ce lien:
    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
     
    SELECT XMLElement(
        name "domain", XMLAttributes(idDomaine AS "name"),
        (
          SELECT XMLAgg(
            XMLELEMENT(
                name="competence", 
                XMLAttributes(idCompetence AS "name")
            )
            FROM COMPETENCE
            WHERE domComp = idDomaine
          )
        )
    )
    FROM DOMAINE;
    Mais cela me renvoit une erreur à savoir : Erreur SQL : ORA-00931: identificateur absent

    J'ai dû me tromper quelque part ou mal m'y prendre mais je ne vois pas.

    PS : j'ai essayé au moins de faire l'imbrication sans avoir le descriptif des compétences et domaines dans ma requête.

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Bonjour,

    Vous pouvez essayer ceci :
    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
    27
    28
    29
    30
    31
    32
    33
     
    with COMPETENCE as (Select 1 idCompetence, 'Competence_1' descriptif, 1 domComp From dual union all
    Select 2 idCompetence, 'Competence_2' descriptif, 1 domComp From dual union all
    Select 3 idCompetence, 'Competence_3' descriptif, 2 domComp From dual union all
    Select 4 idCompetence, 'Competence_4' descriptif, 2 domComp From dual union all
    Select 5 idCompetence, 'Competence_5' descriptif, 2 domComp From dual),
    DOMAINE as (Select 1 idDomaine, 'Domaine_1' descriptif From Dual Union All
    Select 2 idDomaine, 'Domaine_2' descriptif From Dual)
    Select XMLSERIALIZE(CONTENT XMLELEMENT(
    		NAME "domaine",
    		XMLATTRIBUTES(
    			D.idDomaine "name"
    		),
    		XMLFOREST(
    			d.descriptif "description"
    		),
        (
    			SELECT XMLAGG(
    				XMLELEMENT(
    					NAME "competence",
    					XMLATTRIBUTES(
    						c.idCompetence "name"
    					),
              XMLFOREST(
          			c.descriptif "description"
          		)
    				)
    			)
    			FROM competence c
    			WHERE C.domcomp = D.idDomaine
    		)
    	))
    From DOMAINE D

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Par défaut
    ça marche parfaitement merci beaucoup ! Je vais essayer de comprendre ça correctement de mon coté.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Les XMLForest pour un seul élément sont justement remplaçables par XMLElement !
    Mais sinon, même solution :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    SELECT dm.idDomaine,
           XMLElement(name "domain",
                      XMLAttributes(dm.idDomaine AS "name"),
                      XMLElement(name "description", dm.descriptif),
           (SELECT XMLAgg(XMLElement(name "competence", 
                          XMLAttributes(cm.idCompetence AS "name"),
                          XMLElement(name "description", cm.descriptif))
                         )
              FROM COMPETENCE cm
             WHERE cm.domComp = dm.idDomaine
           )) as tt
    FROM DOMAINE dm;
     
     
    IDDOMAINE  XML
    ---------- --------------------------------------------
             1  <domain name="1">
                  <description>Domaine_1</description>
                  <competence name="1">
                    <description>Competence_1</description>
                  </competence>
                  <competence name="2">
                    <description>Competence_2</description>
                  </competence>
                </domain>
     
             2  <domain name="2">
                  <description>Domaine_2</description>
                  <competence name="3">
                    <description>Competence_3</description>
                  </competence>
                  <competence name="4">
                    <description>Competence_4</description>
                  </competence>
                  <competence name="5">
                    <description>Competence_5</description>
                  </competence>
                </domain>

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

Discussions similaires

  1. Pb requête imbriquée
    Par ddams dans le forum Requêtes
    Réponses: 11
    Dernier message: 20/04/2004, 12h13
  2. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 22h52
  3. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  4. Requêtes imbriquées ?
    Par Ph. B. dans le forum XMLRAD
    Réponses: 7
    Dernier message: 06/05/2003, 13h19
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15

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