Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/12/2010, 16h34   #1
Membre du Club
 
Inscription : mai 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 50
Points : 42
Points : 42
Par défaut [XMLAgg] Requête imbriqué

Bonsoir.

J'ai deux tables DOMAINE et COMPETENCE :
Code :
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 :
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 :
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.
Psymon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h57   #2
Membre régulier
 
Inscription : septembre 2008
Messages : 84
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 84
Points : 88
Points : 88
Bonjour,

Vous pouvez essayer ceci :
Code :
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
spdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 17h01   #3
Membre du Club
 
Inscription : mai 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 50
Points : 42
Points : 42
ça marche parfaitement merci beaucoup ! Je vais essayer de comprendre ça correctement de mon coté.
Psymon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 17h46   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Les XMLForest pour un seul élément sont justement remplaçables par XMLElement !
Mais sinon, même solution :
Code :
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>
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h07.


 
 
 
 
Partenaires

Hébergement Web