INSERTXMLBEFORE |
Insère avant le XML |
|---|---|
| Oracle Database SQL | Oracle 10g ou supérieure |
Syntaxe
| INSERTXMLBEFORE(XMLTypeInstance,XPath,value,namespace) |
Paramètres
| Nom | Description |
|---|---|
| XMLTypeInstance | Ce paramètre permet d'indiquer l'instance de XMLType. |
| XPath | Ce paramètre permet d'indiquer un ou plusieurs noeud(s) à atteindre. |
| value | Ce paramètre permet d'indiquer la valeur à insérer. |
| namespace | Ce paramètre permet d'indiquer l'espace de nom. |
Description
Cette fonction permet d'insérer une valeur immédiatement après le noeud spécifié du document XML.
Remarques
- Insertion structurée dans un document XML : La fonction INSERTXMLBEFORE permet d'insérer un noeud XML juste avant un autre noeud spécifié dans un document de type XMLType. Elle est utile pour réorganiser dynamiquement la structure XML sans devoir reconstruire manuellement tout le document. Cela s'avère pratique dans des systèmes utilisant XML pour des configurations ou des structures hiérarchiques.
- Basée sur un XPath ciblé : Le paramètre XPath permet de localiser précisément le noeud de référence avant lequel la nouvelle valeur sera insérée. Cette approche donne un haut niveau de contrôle, semblable à la navigation XPath dans des outils XML spécialisés. L'exactitude de ce chemin est cruciale pour le bon fonctionnement.
- Différente de INSERTCHILDXML ou APPENDCHILDXML : Contrairement à INSERTCHILDXML, qui insère un noeud comme enfant, INSERTXMLBEFORE l'insère au même niveau hiérarchique que le noeud ciblé. Cela permet de manipuler des blocs XML "frères" et d'ajuster l'ordre des éléments dans un même niveau, ce qui est souvent important pour les documents XML soumis à des contraintes de séquence.
- Le contenu inséré peut être simple ou structuré : Le paramètre value peut contenir une chaîne de texte XML (comme <ville>Québec</ville>) ou un texte simple (comme Montréal). Si le contenu n'est pas bien formé (dans le cas XML), Oracle retournera une erreur. Il est donc essentiel de valider le format de la valeur avant l'insertion.
- Retourne une instance XMLType modifiée : La fonction ne modifie pas directement la source XML entreposée. Elle retourne une nouvelle instance de XMLType avec la modification appliquée. Pour rendre les modifications permanentes, il est nécessaire d'utiliser cette instance dans une instruction UPDATE.
- Supporte les espaces de noms via un paramètre dédié : Le quatrième paramètre namespace permet de spécifier l'espace de noms XML (s'il existe) pour que l'XPath soit interprété correctement. Cela est crucial dans les documents XML complexes où les noeuds sont qualifiés par des préfixes (exemple : ns:adresse). Omettre le namespace peut empêcher la fonction de trouver le noeud cible.
- Très utile pour les documents XML ordonnés : Certains schémas XML exigent que les éléments apparaissent dans un certain ordre. INSERTXMLBEFORE permet de respecter cette contrainte en insérant un élément avant un autre sans avoir à supprimer puis reconstruire l'arborescence, ce qui réduit les risques d'erreurs.
- Compatible avec d'autres fonctions de transformation XML : INSERTXMLBEFORE peut être utilisée en combinaison avec d'autres fonctions Oracle XML comme EXTRACT, UPDATEXML ou DELETEXML. Cela permet de réaliser des manipulations complexes (ajout, suppression, modification) dans un seul bloc SQL, ce qui est idéal pour des scripts de transformation automatisés.
- Utile dans les systèmes de gestion de configuration XML : Dans les applications où les configurations sont entreposées en XML, INSERTXMLBEFORE est utile pour insérer des blocs de configuration dans l'ordre requis. Par exemple, on peut ajouter un paramètre avant un autre paramètre existant dans un fichier de configuration géré par la base.
- Sensible à la structure réelle du document XML : Si le XPath ciblé ne correspond à aucun noeud dans le document XML, l'insertion échoue. Cela impose une bonne connaissance de la structure XML source et, idéalement, un contrôle préalable par EXISTSNODE ou EXTRACT pour éviter les erreurs au moment de l'exécution.
- Permet la manipulation de documents XML volumineux : Même dans des documents XML contenant plusieurs centaines de noeuds, INSERTXMLBEFORE reste performante car elle cible un noeud spécifique. Elle évite de devoir lire, modifier et reconstruire tout le document côté client, ce qui optimise les performances dans les bases volumineuses.
- Fonction disponible depuis Oracle 10g : INSERTXMLBEFORE a été introduite dans Oracle 10g avec l'extension des fonctions de manipulation XML via XMLType. Elle fait partie des fonctionnalités d'Oracle XML DB permettant une gestion native, efficace et conforme aux standards XML directement dans le moteur SQL.
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015