[英]Oracle 11g ExtractValue to return all XML data
I have the following formatted XML produced using Oracle "pivot XML", ie: 我有以下使用Oracle“枢轴XML”生成的格式化XML,即:
<?xml version="1.0" encoding="UTF-8"?>
<PivotSet>
<item>
<column name="INTERFACE_NO">1</column>
<column name="INTERFACE_NAME_A">abc1</column>
<column name="INTERFACE_L">11</column>
<column name="INTERFACE_R">22</column>
</item>
<item>
<column name="INTERFACE_NO">2</column>
<column name="INTERFACE_NAME_A">abc2</column>
<column name="INTERFACE_L">33</column>
<column name="INTERFACE_R">44</column>
</item>
<item>
<column name="INTERFACE_NO">3</column>
<column name="INTERFACE_NAME_A">abc3</column>
<column name="INTERFACE_L">55</column>
<column name="INTERFACE_R">66</column>
</item>
<item>
<column name="INTERFACE_NO">4</column>
<column name="INTERFACE_NAME_A">abc4</column>
<column name="INTERFACE_L">77</column>
<column name="INTERFACE_R">882</column>
</item>
</PivotSet>
Based on the above XML, using Oracle SQL (11g) how can I extract all the values above? 基于以上XML,如何使用Oracle SQL(11g)提取以上所有值?
As an example, I've been using the following, ie 例如,我一直在使用以下内容,即
select
extractvalue(aggregated_interface_no_xml,'/PivotSet/item[2]/column[1]') aa,
extractvalue(aggregated_interface_no_xml,'/PivotSet/item[2]/column[2]') bb,
extractvalue(aggregated_interface_no_xml,'/PivotSet/item[2]/column[3]') cc,
extractvalue(aggregated_interface_no_xml,'/PivotSet/item[2]/column[4]') dd
from t
but this will only return the data relating to INTERFACE_NO 2. 但这只会返回与INTERFACE_NO 2有关的数据。
I'm unsure how to pass a wildcard against /PivotSet/item
to return all records within XML PivotSet, for each item? 我不确定如何针对/PivotSet/item
传递通配符以返回XML PivotSet中每个项目的所有记录?
Xmlsequence is deprecated. Xmlsequence已过时。 Xmltable is good and clean method. Xmltable是一种很好且干净的方法。
select * from
xmltable('PivotSet/item' passing
xmltype('<PivotSet>
<item>
<column name="INTERFACE_NO">1</column>
<column name="INTERFACE_NAME_A">abc1</column>
<column name="INTERFACE_L">11</column>
<column name="INTERFACE_R">22</column>
</item>
<item>
<column name="INTERFACE_NO">2</column>
<column name="INTERFACE_NAME_A">abc2</column>
<column name="INTERFACE_L">33</column>
<column name="INTERFACE_R">44</column>
</item>
<item>
<column name="INTERFACE_NO">3</column>
<column name="INTERFACE_NAME_A">abc3</column>
<column name="INTERFACE_L">55</column>
<column name="INTERFACE_R">66</column>
</item>
<item>
<column name="INTERFACE_NO">4</column>
<column name="INTERFACE_NAME_A">abc4</column>
<column name="INTERFACE_L">77</column>
<column name="INTERFACE_R">882</column>
</item>
</PivotSet>')
columns
row_num FOR ORDINALITY
,aa varchar2(100) path './column[1]'
,bb varchar2(100) path './column[2]'
,cc varchar2(100) path './column[3]'
,dd varchar2(100) path './column[4]'
)
You can do this using an xml table. 您可以使用xml表执行此操作。 Something like this: 像这样:
SELECT EXTRACTVALUE(VALUE(xml_list), '//column[1]') AS interface_no
,EXTRACTVALUE(VALUE(xml_list), '//column[2]') AS interface_name_a
,EXTRACTVALUE(VALUE(xml_list), '//column[3]') AS interface_l
,EXTRACTVALUE(VALUE(xml_list), '//column[4]') AS interface_r
FROM TABLE(XMLSEQUENCE(EXTRACT(XMLType('<?xml version="1.0" encoding="UTF-8"?>
<PivotSet>
<item>
<column name="INTERFACE_NO">1</column>
<column name="INTERFACE_NAME_A">abc1</column>
<column name="INTERFACE_L">11</column>
<column name="INTERFACE_R">22</column>
</item>
<item>
<column name="INTERFACE_NO">2</column>
<column name="INTERFACE_NAME_A">abc2</column>
<column name="INTERFACE_L">33</column>
<column name="INTERFACE_R">44</column>
</item>
<item>
<column name="INTERFACE_NO">3</column>
<column name="INTERFACE_NAME_A">abc3</column>
<column name="INTERFACE_L">55</column>
<column name="INTERFACE_R">66</column>
</item>
<item>
<column name="INTERFACE_NO">4</column>
<column name="INTERFACE_NAME_A">abc4</column>
<column name="INTERFACE_L">77</column>
<column name="INTERFACE_R">882</column>
</item>
</PivotSet>'), 'PivotSet/item'))) xml_list;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.