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

Oracle Discussion :

Recherche dans XMLTYPE de PERE/FILS de type 0..n


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut Recherche dans XMLTYPE de PERE/FILS de type 0..n
    Bonjour,

    J'ai un fichier XML stocké dans un XMLTYPE ayant cette structure :
    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
    39
    40
    41
    42
    <root>
        <Groupe>
            <Id>A</Id>
            <Entete>
                <Info>
                    <Nom>Blablabla</Nom>
                </Info>
            </Entete>
            <Detail>
                <SousGroupe>
                    <Id>1</Id>
                </SousGroupe>
                <SousGroupe>
                    <Id>2</Id>
                </SousGroupe>
            </Detail>
        </Groupe>
        <Groupe>
            <Id>B</Id>
            <Entete>
                <Info>
                    <Nom>Inconnu</Nom>
                </Info>
            </Entete>
        </Groupe>
        <Groupe>
            <Id>C</Id>
            <Entete>
                <Info>
                    <Nom>Toto</Nom>
                </Info>
            </Entete>
            <Detail>
                <SousGroupe>
                    <Id>1</Id>
                </SousGroupe>
                <SousGroupe>
                    <Id>2</Id>
                </SousGroupe>
            </Detail>
        </Groupe>
    </root>
    Je dois extraire cette infos du groupe et des sous-groupes.
    J'ai fais une requête comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT extractValue(t1.column_value, '/Groupe/Id'),
    	     extractValue(t1.column_value, '/Groupe/Entete/Info/Nom'),
           , extractValue(t2.column_value, '/Detail/SousGroupe/Id')
    FROM   xml_table s
    , TABLE (xmlsequence (extract (s.XML_DOCUMENT, '/Root/Groupe'))) t1
    , TABLE (xmlsequence (extract (value(t1), '*/Detail'))) t2
    ;
    Or comme le groupe peut avoir ou pas de sous-groupes, la requête ci-dessus me renvoie :
    Id Nom SousGroupe
    -- ------- ----------
    A Blablabla 1
    A Blablabla 2
    C Toto 1
    C Toto 2
    Or je veux que la requete me renvoie tous les groupes, même ceux sans sous-groupe :
    Id Nom SousGroupe
    -- ------- ----------
    A Blablabla 1
    A Blablabla 2
    B Inconnu
    C Toto 1
    C Toto 2
    En gros, je veux faire une jointure ouverte pour extraire des infos dans du XMLTYPE.
    Et ça je ne sais pas faire. Donc j'ai besoin de votre aide.

    Merci.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Quelque chose comme
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With xml_table As (
      2  Select XMLTYPE('<root>
      3      <Groupe>
      4          <Id>A</Id>
      5          <Entete>
      6              <Info>
      7                  <Nom>Blablabla</Nom>
      8              </Info>
      9          </Entete>
     10          <Detail>
     11              <SousGroupe>
     12                  <Id>1</Id>
     13              </SousGroupe>
     14              <SousGroupe>
     15                  <Id>2</Id>
     16              </SousGroupe>
     17          </Detail>
     18      </Groupe>
     19      <Groupe>
     20          <Id>B</Id>
     21          <Entete>
     22              <Info>
     23                  <Nom>Inconnu</Nom>
     24              </Info>
     25          </Entete>
     26      </Groupe>
     27      <Groupe>
     28          <Id>C</Id>
     29          <Entete>
     30              <Info>
     31                  <Nom>Toto</Nom>
     32              </Info>
     33          </Entete>
     34          <Detail>
     35              <SousGroupe>
     36                  <Id>1</Id>
     37              </SousGroupe>
     38              <SousGroupe>
     39                  <Id>2</Id>
     40              </SousGroupe>
     41          </Detail>
     42      </Groupe>
     43  </root>') XML_DOCUMENT
     44    from dual
     45  )
     46  Select b.id, b.nom, c.SGrpId
     47    From xml_table a,
     48         XMLTable('/root/Groupe'
     49                   passing a.XML_DOCUMENT
     50                   Columns Id    Varchar2(2)  Path '/Groupe/Id',
     51                           Nom   Varchar2(10) Path '/Groupe/Entete/Info/Nom',
     52                           SGrp  XmlType      Path '/Groupe/Detail' Default XmlQuery('<Detail><SousGroupe><Id>0</Id></SousGroupe></Detail>' Returning Content)
     53                 ) b,
     54         XMLTable('/Detail/SousGroupe/Id'
     55                  Passing b.Sgrp
     56                  Columns SGrpId Varchar2(2)  Path '/Id' Default 0
     57                 ) c
     58  /
     
    ID NOM        SGRPID
    -- ---------- ------
    A  Blablabla  1
    A  Blablabla  2
    B  Inconnu    0
    C  Toto       1
    C  Toto       2
     
    SQL>
    Bref j'ai "inventé" la valeur 0 quand aucune valeur n'est précisée.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    OK merci.
    C'est tout à fait ce que je voulais.

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

Discussions similaires

  1. Recherche dans XMLTYPE
    Par Hobbi1 dans le forum Oracle
    Réponses: 2
    Dernier message: 22/05/2013, 16h59
  2. Requete pere/fils selon type
    Par hwoarang dans le forum Développement
    Réponses: 8
    Dernier message: 15/12/2010, 10h08
  3. Réponses: 1
    Dernier message: 18/09/2009, 19h37
  4. Recherche dans colonne de type "blob"
    Par ginkas31 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/04/2008, 16h20
  5. Communication pere/fils dans un serveur
    Par romainromain dans le forum Réseau
    Réponses: 4
    Dernier message: 22/11/2006, 19h47

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