Sélectionnez xpath valeurs des lignes distinctes dans Oracle SQL
J'ai besoin de sélectionner certaines valeurs à partir d'un XML stockées dans une colonne de CLOB dans une base de données Oracle.
Le meilleur que je pouvais venir est le suivant:
select extract(xmltype(COLUMN), 'xpath-expression').getStringVal() as XMLVAL from TABLE t;
Le problème est que lorsque la XPATH permet de sélectionner plusieurs nœuds, les valeurs sont concaténées. J'ai besoin d'avoir chaque nœud sélectionné sur une ligne distincte. Évidemment, la concaténation doit se produire dans getStringVal(), je l'utilise car j'ai besoin d'avoir des chaînes dans mon client (pas XMLType). Que dois-je utiliser à la place de getStringVal()?
EDIT: notez qu'il y a une question similaire ici: Oracle Pl/SQL: Boucle à travers XMLTYPE nœuds - mais je ne pouvais pas l'appliquer à mon cas. Il utilise deux expressions XPATH, et le principe de séparation n'est pas nette.
EDIT2: Le XML est très complexe, mais en gros j'ai besoin de trouver la "valeur" des entrées dans
<string name="SOME_KEY" value="some value"/>
éléments qui sont enterrées sous de nombreux autres éléments. J'utilise XPATH //*[@name="SOME_KEY"]/@value
et il constate avec succès, la valeur de l'attribut de tous les éléments XML qui ont un SOME_KEY attribut.
J'ai essayé, mais jusqu'à présent je n'ai eu que des erreurs et des valeurs null à la sortie.
OriginalL'auteur lbalazscs | 2013-05-24
Vous devez vous connecter pour publier un commentaire.
De l'essayer.
Échantillon à http://sqlfiddle.com/#!4/87af2/1
J'ai édité ma question pour expliquer la structure XML et mon XPATH
J'ai mis à jour la réponse auprès d'un échantillon sqlfiddle. Espérons que cela aide.
Merci à vous, suivant votre exemple, j'ai pu extraire le nom et la valeur de tous les éléments de chaîne, et plus tard, j'ai filtré par de simples SQL.
sqlfiddle ne charge plus 🙁
OriginalL'auteur Noel
J'ai eu la même chose, mais il n'a pas assez de travail avec "Eat A Peach"'s réponse. J'ai eu quelque chose comme ce qui suit dans une colonne comme xmltype.
Appelons la colonne xmlcontent, et ont de ce dans une table nommée mytable. Puis en extrayant les 2 numéros d'identification que les 2 lignes qui peut être fait comme suit:
Espère que cela aide quelqu'un 🙂
OriginalL'auteur Rubenisme