Вы можете использовать комбинацию extract
и extractvalue
:
SQL> SELECT extractvalue(column_value, 'Paper/@Name') NAME,
2 extractvalue(column_value, 'Paper/@ID') ID,
3 extractvalue(column_value, 'Paper/@Weight') Weight,
4 extractvalue(column_value, 'Paper/@Type') TYPE
5 FROM TABLE (SELECT xmlsequence(XMLTYPE(a).extract('BaseXML/' ||
6 'InvoiceCanvasDetails/' ||
7 'Grouping/ParentGroup/' ||
8 'ParentGroupLineItems/' ||
9 'Item/Papers/Paper'))
10 FROM t);
NAME ID WEIGHT TYPE
---------------------------------------- ---------- ---------- -----
UNCOATED GROUNDWOOD SCA+ (25X38) 126287 1268 A4
COATED GROUNDWOOD SCA+ (25X38) 126288 1290 A4
Если вы ищете конкретный идентификатор, вы можете фильтровать данные непосредственно в функции extract
:
SQL> SELECT extract(XMLTYPE(a),
2 'BaseXML/InvoiceCanvasDetails/Grouping/' ||
3 'ParentGroup/ParentGroupLineItems/' ||
4 'Item/Papers/Paper[@ID="126287"]') ext
5 FROM t;
EXT
--------------------------------------------------------------------------------
<Paper Name="UNCOATED GROUNDWOOD SCA+ (25X38)" ID="126287" Weight="1268" Type="A
4"/>