2011-01-13 14 views
1

Ich habe eine interessante Situation in Oracle. Wir speichern eine XML-Zeichenfolge in einem Feld und Teil wie folgt:XML in Oracle analysieren

<dc:subject>info1</dc:subject> <dc:subject>info2</dc:subject><dc:subject>info3</dc:subject> 

Und wenn ich dieses Feld bin Abfrage, verwende ich die folgenden:

m.M_DC.extract('/qualifieddc/dc:subject/text()', 'xmlns:dc="http://purl.org/dc/elements/1.1/"').getStringVal() "INFO", 

und das resultierende INFO Bereich wird „info1info2info3“ .

Gibt es eine Oracle-Funktion oder eine Möglichkeit, diesen Infobereich als "info1, info2, info3" zu definieren?

Jede Hilfe willkommen ...

Dank ...

Antwort

2

XML in Oracle ist ein Alptraum. Sie können so etwas wie diese (XMLTABLE zur Rettung) versuchen:

> select wmsys.wm_concat(''||column_value) text 
    2 from 
    3 xmltable(
    4  XMLNAMESPACES('http://purl.org/dc/elements/1.1/' as "dc"), 
    5  '$xml/qualifieddc/dc:subject/text()' 
    6  passing xmltype('<qualifieddc xmlns:dc="http://purl.org/dc/elements/1.1/ 
">' || 
    7    '<dc:subject>info1</dc:subject> <dc:subject>info2</dc:subject>< 
dc:subject>info3</dc:subject>' || 
    8   '</qualifieddc>') as "xml"); 

TEXT 
-------------------------------------------------------------------------------- 

info1,info2,info3 

Bitte beachte, dass ich wmsys.wm_concat für Verkettung bin mit, was nicht zu empfehlen ist. Verwenden Sie eine andere Stragg-Implementierung.

-1

Dieser Code wird Ihnen helfen.

DECLARE- XMLType x: = XMLType ( ' info1
info2 info3'); BEGIN für R IN ( SELECT ExtractValue (Wert (p), '/ dc/text()') als Name FROM TABLE (XMLSequence (Extrakt (x, '/ DC'))) p ) LOOP

ENDE SCHLEIFE; ENDE;

code von mir in plsql entwickler getestet.

0

Wie Samuel in seinem Kommentar bereits darauf hingewiesen hat, ist die Verarbeitung von XML auf Oracle ein Albtraum. Insbesondere wenn Sie große Mengen an XML-Daten laden. Es wird schlimmer, wenn XML oder XSD sehr komplex sind, wie es bei vielen Industriestandards der Fall ist. Meiner Meinung nach ist der beste Weg, das XML vorzuverarbeiten und als Tabellen in Oracle zu speichern. Dann müssen Sie keine esoterischen Abfragesprachen wie XQuery und XPath lernen. Mit ETL-Tools wie ODI können Sie dies erreichen. Es gibt auch dedizierte Enterprise-XML-Parser, mit denen Sie load XML to Oracle ohne Code

schreiben können