EXTRACTVALUE |
Extrait la valeur |
| Oracle Database SQL |
Oracle 9i (version 9.2) à Oracle 12c Release 2 (12.2) |
Syntaxe
|
EXTRACTVALUE(XMLType_instance, XPath_string [, namespace_string ])
|
Paramètres
| Nom |
Description |
| XMLType_instance |
Ce paramètre permet d'indiquer l'instance du type XMLType sur laquelle la requête XPath va être appliquée. Il représente le document XML source à analyser. |
| XPath_string |
Ce paramètre permet de spécifier l'expression XPath qui identifie l'élément ou l'attribut XML dont on souhaite extraire la valeur. |
| namespace_string |
Ce paramètre permet d'indiquer une chaîne de définition des espaces de noms utilisés dans le document XML. Il facilite l'évaluation correcte des chemins XPath si des namespaces sont présents. |
Description
Cette fonction permet d'extraire la valeur d'un élément XML donné, en se basant sur une requête XPath appliquée à une instance XMLType. Elle est utile pour récupérer des données textuelles contenues dans un document XML.
Remarques
- Utilisation ciblée sur les données textuelles XML : La fonction EXTRACTVALUE est spécifiquement conçue pour extraire des valeurs texte à partir d'un
document XML. Contrairement à d'autres fonctions comme EXTRACT, elle ne retourne pas un fragment XML, mais directement le contenu textuel de l'élément ou attribut ciblé. Cela
la rend particulièrement utile lorsqu'on souhaite transformer un contenu structuré XML en une valeur exploitable dans des colonnes ou des filtres SQL classiques.
- Syntaxe simple mais rigide : La syntaxe de EXTRACTVALUE est relativement simple, mais elle impose que l'élément ciblé par XPath retourne un seul noeud. Si
plusieurs noeuds sont trouvés, Oracle génère une erreur ORA-19025. Cela peut poser problème dans les cas où l'on veut extraire plusieurs éléments similaires, obligeant à
restreindre l'expression XPath (exemple : /a/b[1]) ou à utiliser une fonction alternative comme XMLTable.
- Fonction obsolète depuis Oracle 12.2 : Depuis Oracle 12c Release 2 (12.2), EXTRACTVALUE est dépréciée. Cela signifie qu'elle est toujours disponible, mais
susceptible d'être supprimée dans une version future. Oracle recommande de la remplacer par des fonctions plus standards et plus robustes, comme XMLQuery,
XMLTable. Cette obsolescence implique qu'il ne faut plus l'utiliser dans de nouveaux projets.
- Nécessite un type XMLType : La fonction EXTRACTVALUE exige que le premier paramètre soit de type XMLType. Cela signifie que les données
XML doivent être converties, si elles sont sous forme de chaîne (VARCHAR2, CLOB,...). Cette exigence peut introduire une surcharge
de traitement ou des conversions explicites dans les requêtes, ce qui réduit parfois sa flexibilité dans les bases non entièrement orientées XML.
- Sensible à la casse dans les noms de balises : Comme la majorité des fonctions XML en Oracle, EXTRACTVALUE est sensible à la casse dans les expressions
XPath. Si le nom d'un élément XML est <NomClient>, une requête sur /nomclient ne renverra rien. Cela peut surprendre les développeurs peu familiers avec la norme XPath,
et générer des résultats silencieusement incorrects si aucune validation n'est faite.
- Nécessite un XPath valide : Le deuxième paramètre doit être une chaîne XPath valide. Cette expression doit respecter strictement la syntaxe XPath 1.0, car
Oracle ne prend pas en charge XPath 2.0 dans cette fonction. Cela limite les possibilités d'extraction avancée, comme les conditions complexes ([position()>1], fonctions
intégrées, etc.) et pousse à utiliser des alternatives plus modernes si besoin.
- Prise en charge optionnelle des espaces de noms : Le troisième paramètre, namespace_string, permet de gérer les documents
XML avec espaces de noms. Sans ce paramètre, une requête XPath peut échouer ou ne rien retourner si le document utilise des
espaces de noms XML. La définition de espaces de noms via des alias dans cette chaîne peut être fastidieuse, mais reste indispensable pour naviguer correctement dans certains
documents XML standards (SOAP, UBL...).
- Intégration limitée dans les projections multiples : EXTRACTVALUE est généralement utilisée dans les clauses SELECT, mais elle ne permet pas de parcourir
plusieurs lignes XML en une seule fois. Contrairement à XMLTable, qui peut retourner un ensemble de lignes ou colonnes, EXTRACTVALUE ne retourne qu'un scalaire unique,
ce qui limite sa pertinence dans les requêtes complexes ou les agrégations XML.
- Performances correctes sur petits volumes XML : Pour des documents XML de taille modérée, EXTRACTVALUE offre des performances satisfaisantes, notamment
lorsqu'elle est utilisée en combinaison avec des index XMLType. Cependant, sur de gros volumes ou dans des boucles PL/SQL, il est conseillé de basculer vers des solutions
plus efficaces et la mise à l'échelle comme XMLTable avec index XPath contextuels.
- Usage fréquent dans des vues matérialisées ou des ETL : EXTRACTVALUE a longtemps été utilisée dans les processus ETL (Extract-Transform-Load) pour analyser
des documents XML entreposés en base. Elle est notamment courante dans les requêtes d'intégration ou de migration de données où
l'on doit extraire des métadonnées XML entreposées dans des CLOBs. Aujourd'hui, ces cas d'usage tendent à être remplacés par XMLQuery.
- Exemple simple mais fragile : Une simple requête comme SELECT EXTRACTVALUE(XMLType('<a><b>123</b></a>'), '/a/b') FROM dual; retourne bien 123. Mais si
l'élément <b> est répété, ou absent, ou nommé différemment (<B>), la requête retourne une erreur ou NULL. Cette fragilité impose de valider le contenu
XML et le XPath de manière rigoureuse, surtout en environnement de production.
- Non conforme aux standards SQL/XML modernes : EXTRACTVALUE, bien qu'historique, n'est pas conforme aux standards SQL/XML modernes définis par le W3C ou
ISO/IEC. Pour cette raison, elle n'est plus recommandée dans les nouvelles architectures orientées données. Les alternatives comme XMLQuery, XMLExists, et XMLTable
offrent une meilleure interopérabilité, une standardisation accrue, et une extensibilité supérieure.
Dernière mise à jour : Dimanche, le 29 Juin 2025