データを段階的に抽出します:
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;
XMLTable xobjects
各AuxiliaryObject
が含まれています AuxiliaryType
内のインスタンス 、元のXMLテキストから。属性name
があります およびid
、およびネストされた行を含むサブXMLType。 2番目のXMLTable、xrows
、それを展開して、要素を抽出できるようにします。 XMLタイプの結合と受け渡しにより、必要な出力を提供する階層が作成されます。
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
これは、11.2.0.3データベースに対するSQL Developer、および SQLFiddle> 。
この回答の以前のCTEベースのバージョンもSQLDeveloperで機能しましたが、 SQL Fiddle ORA-600エラーが発生しました。質問で発生した問題に加えて、SQL Fiddleがパッチが適用されていないバージョンまたは少なくとも異なるパッチが適用されたバージョンの11gR2にあり、XML処理にバグがあることを示唆しています。