2016-04-27 11 views
0

私は、次のフォーマットされたXMLはすなわち、「ピボットXMLの」Oracleを使用して生産している:Oracleの11グラムEXTRACTVALUEは、すべての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> 

を上記のXMLに基づいて、私は抽出することができますどのようにOracleのSQL(11グラム)を使用して、上記のすべての値?

例として、私は以下を使用してきた、すなわち

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  

が、これは私だけのに対して、ワイルドカードを渡す方法がわからないよINTERFACE_NO 2.

に関連するデータを返します。 /PivotSet/item XML PivotSet内のすべてのレコードを各アイテムに対して返すか?

助けていただければ幸いです。

ありがとうございました。

答えて

0

xmlテーブルを使用してこれを行うことができます。このようなもの:

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; 
1

Xmlシーケンスは推奨されていません。 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]' 
) 
関連する問題