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 :

Extraction d'un CLOB [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Points : 62
    Points
    62
    Par défaut Extraction d'un CLOB
    Bonjour,

    J'aimerai extraire la valeur d'un tag d'un xml qui est dans un CLOB. Voici un exemple, mais celui-ci me retourne "null".

    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
     With Data As (
     
        Select SYS.XMLTYPE('<Order>
       <Id>37698</Id>
       <From>PSPIServices</From>
       <Type>TP</Type>
       <Nui>
          <StartValue>3138387968</StartValue>
          <EndValue>3140485119</EndValue>
       </Nui>
       <Specific>
          <C2Reference>999795</C2Reference>
    	</Specific>  
    </Order>') x_el
          From dual
       )
         Select a.C2Reference
            From Data t,
                 XmlTable ('Order/Specific/C2Reference'
                          passing x_el
                          COLUMNS
                                  LigNo For ORDINALITY,
                                  C2Reference    NUMBER Path '@C2Reference'
                          ) a;
    Je devrai normalement retrouver la valeur 999795. Quelle est l'erreur ?

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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
     With Data As (
     
        Select SYS.XMLTYPE('<Order>
       <Id>37698</Id>
       <From>PSPIServices</From>
       <Type>TP</Type>
       <Nui>
          <StartValue>3138387968</StartValue>
          <EndValue>3140485119</EndValue>
       </Nui>
       <Specific>
          <C2Reference>999795</C2Reference>
    	</Specific>  
    </Order>') x_el
          From dual
       )
         Select a.C2Reference
            From Data t,
                 XmlTable ('Order/Specific'
                          passing x_el
                          COLUMNS LigNo For ORDINALITY,
                                  C2Reference    NUMBER Path 'C2Reference'
                          ) a;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    Merci c'est parfait.

    Et si j'ajoute un namespace comme 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
     
     
    '<Order xmlns="http://xmlns.ppp.com/CSI/EBO/Order/V5">
       <Id>37698</Id>
       <From>PSPIServices</From>
       <Type>TP</Type>
       <Nui>
          <StartValue>3138387968</StartValue>
          <EndValue>3140485119</EndValue>
       </Nui>
       <Specific>
          <C2Reference>999795</C2Reference>
    	</Specific>  
    </Order>'
    Comment je fais pour récupérer le C2Reference ?

    J'ai tenté ceci sans succès :
    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
     
    With Data As (
         Select SYS.XMLTYPE('<Order xmlns="http://xmlns.ppp.com/CSI/EBO/Order/V5">
       <Id>37698</Id>
       <From>PSPIServices</From>
       <Type>TP</Type>
       <Nui>
          <StartValue>3138387968</StartValue>
          <EndValue>3140485119</EndValue>
       </Nui>
       <Specific>
          <C2Reference>999795</C2Reference>
    	</Specific>  
    </Order>') x_el
          From dual 
       )
         Select a.C2Reference
            From Data t,
                 XmlTable ( xmlnamespaces ('http://xmlns.ppp.com/CSI/EBO/Order/V5' AS "X"),
                            '/Order/X/Specific'
                            passing x_el
                            COLUMNS LigNo For ORDINALITY,
                                  C2Reference    NUMBER Path 'X/C2Reference'
                          ) a;

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    De ce que j'ai vu c'est le namespace DEFAULT :
    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
    With Data As (
         Select SYS.XMLTYPE('<Order xmlns="http://xmlns.ppp.com/CSI/EBO/Order/V5">
       <Id>37698</Id>
       <From>PSPIServices</From>
       <Type>TP</Type>
       <Nui>
          <StartValue>3138387968</StartValue>
          <EndValue>3140485119</EndValue>
       </Nui>
       <Specific>
          <C2Reference>999795</C2Reference>
    	</Specific>  
    </Order>') x_el
          From dual 
       )
         Select a.C2Reference
            From Data t,
                 XmlTable ( xmlnamespaces (default 'http://xmlns.ppp.com/CSI/EBO/Order/V5'),
                            '/Order/Specific'
                            passing x_el
                            COLUMNS LigNo For ORDINALITY,
                                  C2Reference    NUMBER Path 'C2Reference'
                          ) a;

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    C'est tout à fait ça. Merci.

    Et en dernier lieu, si je fais un select sur une table qui contient ce CLOB. En corrigeant mon exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
         Select a.C2Reference
            From Data t,
                 XmlTable ( xmlnamespaces (default 'http://xmlns.ppp.com/CSI/EBO/Order/V5'),
                            '/Order/Specific'
                            passing xmltype(t.clob)
                            COLUMNS LigNo For ORDINALITY,
                                  C2Reference    NUMBER Path 'C2Reference'
                          ) a;
    Sachant que le t.clob a cette gueule,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Order xmlns="http://xmlns.ppp.com/CSI/EBO/Order/V5">
       <Id>37698</Id>
       <From>PSPIServices</From>
       <Type>TP</Type>
       <Nui>
          <StartValue>3138387968</StartValue>
          <EndValue>3140485119</EndValue>
       </Nui>
       <Specific>
          <C2Reference>999795</C2Reference>
    	</Specific>  
    </Order>
    Comment je lui indique que je veux avoir que les C2Reference dont le tag Type = 'TP' ?

  6. #6
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Avec XMLExists

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Comment je lui indique que je veux avoir que les C2Reference dont le tag Type = 'TP' ?
    On peut le faire en utilisant un peu plus poussé de xpath:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
                            '/Order[normalize-space(Type)="TP"]/Specific'

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

Discussions similaires

  1. Extraction de mots clés
    Par Olive1808 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 01/02/2016, 20h49
  2. Réponses: 1
    Dernier message: 24/11/2010, 17h53
  3. Extraction fichier .pdf d'un CLOB
    Par merssemic dans le forum SQL
    Réponses: 7
    Dernier message: 13/11/2007, 17h21
  4. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  5. Extraction des phrases d'un Texte
    Par LE CHAKAL dans le forum Langage
    Réponses: 6
    Dernier message: 19/08/2002, 21h23

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