Ich würde die Daten schrittweise extrahieren:
SELECT xobjects.id, xobjects.name, xrows.index_id,
xrows.provider_id_description, xrows.provider_id
FROM XMLTABLE(
'/AuxiliaryType/AuxiliaryObject'
PASSING xmltype(
'<AuxiliaryType>
<AuxiliaryObject id="1" NAME="Provider_P107">
<Row>
<Index_id>1</Index_id>
<Provider_ID_description>GNRCN</Provider_ID_description>
<Provider_ID>GNRCN</Provider_ID>
</Row>
<Row>
<Index_id>2</Index_id>
<Provider_ID_description>EGUT12</Provider_ID_description>
<Provider_ID>EGUT12 </Provider_ID>
</Row>
</AuxiliaryObject>
<AuxiliaryObject id="2" NAME="Provider_P108">
<Row>
<Index_id>1</Index_id>
<Provider_ID_description>GNRCN</Provider_ID_description>
<Provider_ID>GNRCN</Provider_ID>
</Row>
<Row>
<Index_id>2</Index_id>
<Provider_ID_description>EGUT</Provider_ID_description>
<Provider_ID>EGUT </Provider_ID>
</Row>
</AuxiliaryObject>
</AuxiliaryType>'
)
COLUMNS
name VARCHAR2(30) PATH '@NAME',
id VARCHAR2(10) PATH '@id',
xrows XMLTYPE PATH 'Row') xobjects,
XMLTABLE(
'/Row'
PASSING xobjects.xrows
COLUMNS
index_id VARCHAR2(10) PATH 'Index_id',
provider_id_description VARCHAR2(30) PATH 'Provider_ID_description',
provider_id VARCHAR2(30) PATH 'Provider_ID') xrows;
Die XMLTable xobjects
enthält jedes der AuxiliaryObject
Instanzen innerhalb des AuxiliaryType
, aus Ihrem ursprünglichen XML-Text. Es hat die Attribute name
und id
, plus einen untergeordneten XMLType, der die verschachtelten Zeilen enthält. Die zweite XMLTable, xrows
, erweitert das, sodass die Elemente extrahiert werden können. Die Verknüpfungen und Übergabe der XML-Typen erstellt die Hierarchie, die die gewünschte Ausgabe liefert:
ID NAME INDEX_ID PROVIDER_ID_DESCRIPTION PROVIDER_ID
---------- ------------------------------ ---------- ------------------------------ ------------------------------
1 Provider_P107 1 GNRCN GNRCN
1 Provider_P107 2 EGUT12 EGUT12
2 Provider_P108 1 GNRCN GNRCN
2 Provider_P108 2 EGUT EGUT
Dies funktioniert in SQL Developer mit einer 11.2.0.3-Datenbank und in SQL Fiddle .
Eine frühere CTE-basierte Version dieser Antwort funktionierte auch in SQL Developer, aber SQL Fiddle bekam einen ORA-600-Fehler; Das zusammen mit dem Problem, das Sie in der Frage hatten, deutet darauf hin, dass sich SQL Fiddle möglicherweise auf einer ungepatchten oder zumindest anders gepatchten Version von 11gR2 befindet, die Fehler in der XML-Verarbeitung aufweist.