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 15/07/2011, 10h49   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 44
Points : 7
Points : 7
Par défaut Problème avec l'erreur Oracle ORA-19025

Bonjour la team,

j'ai une table 'ma_table' dans laquelle figurent plusieurs enregistrements contenant une structure XML. Lorsque je fais la requête suivante, j'arrive bien à avoir un résultat:

Code :
1
2
3
4
SELECT *
FROM ma_table
WHERE extractValue( structure_xml, '//mon_noeud) = 'TEST'
and mon_id = 1;
Par contre lorsque je ne précise pas l'id, j'obtiens l'erreur Oracle suivante:

Citation:
ORA-19025: EXTRACTVALUE returns value of only one node
19025. 00000 - "EXTRACTVALUE returns value of only one node"
*Cause: Given XPath points to more than one node.
*Action: Rewrite the query so that exactly one node is returned.
Apparemment, plusieurs valeurs peuvent être extraites pour certains enregistrements. Savez-vous me dire s'il est possible de réécrire cette requête de façon à retourner des enregistrements ?

Merci d'avance pour votre aide,
berni.
bernidupont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 10h01   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
peut-être XMLEXISTS?

Code :
1
2
3
4
5
6
7
8
9
10
SQL> CREATE TABLE ma_table(mon_id number, structure_xml xmltype)
TABLE created.
SQL> INSERT INTO ma_table VALUES (1,xmltype('<mon><noeud>TEST</noeud></mon>'))
1 row created.
SQL> INSERT INTO ma_table VALUES (2,xmltype('<mon><noeud>TEST</noeud><noeud>TEST2</noeud></mon>'))
1 row created.
SQL> INSERT INTO ma_table VALUES (3,xmltype('<mon><noeud>XXX</noeud><noeud>YYY</noeud></mon>'))
1 row created.
SQL> commit
Commit complete.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> SELECT *
FROM ma_table
WHERE extractValue( structure_xml, '//mon/noeud/text()') = 'TEST'
AND mon_id = 1
 
    MON_ID STRUCTURE_XML                             
---------- ------------------------------------------
         1 <mon>                                     
             <noeud>TEST</noeud>                     
           </mon>                                    
 
 
1 row selected.
Code :
1
2
3
4
5
6
7
8
9
SQL> SELECT *
FROM ma_table
WHERE extractValue( structure_xml, '//mon/noeud/text()') = 'TEST'
SELECT *
FROM ma_table
WHERE extractValue( structure_xml, '//mon/noeud/text()') = 'TEST'
     *
Error at line 2
ORA-19025: EXTRACTVALUE returns value of only one node
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> SELECT *
FROM ma_table
WHERE xmlexists(  '//mon[noeud="TEST"]' passing structure_xml)
 
    MON_ID STRUCTURE_XML                             
---------- ------------------------------------------
         1 <mon>                                     
             <noeud>TEST</noeud>                     
           </mon>                                    
 
 
         2 <mon>                                     
             <noeud>TEST</noeud>                     
             <noeud>TEST2</noeud>                    
           </mon>
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 10h09   #3
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
aussi possible
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> SELECT * FROM ma_table
WHERE 'TEST' IN (
  SELECT extractvalue(value(t), '//noeud/text()') 
  FROM TABLE(xmlsequence(extract(structure_xml,'//mon/noeud')))t)
 
    MON_ID STRUCTURE_XML                             
---------- ------------------------------------------
         1 <mon>                                     
             <noeud>TEST</noeud>                     
           </mon>                                    
 
         2 <mon>                                     
             <noeud>TEST</noeud>                     
             <noeud>TEST2</noeud>                    
           </mon>
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h02.


 
 
 
 
Partenaires

Hébergement Web