2016-04-06 6 views
0

Tablodan veri seçen bir sorgu yazarken zorluk yaşıyorum (card_type). Xml özniteliğini (EXT_PROPERTIES_XML) yalnızca Ad etiketinin içinde "PARTNER_CD" bulunduğu yerde ayrıştırmam gerekiyor. Aşağıda xml özniteliği örneği verilmiştir.Oracle Sql? Kullanılarak XML giriş alanı için specificc değeri nasıl ayrıştırılır?

<Properties> 
     <Property> 
       <Name>PARTNER_CD</Name> 
       <Value>LOBT</Value> 
     </Property> 
     <Property> 
       <Name>REJECT_AT_PUMP</Name> 
       <Value>true</Value> 
     </Property> 
     <Property> 
       <Name>MAX_LITRE</Name> 
       <Value>75</Value></Property> 
    </Properties> 

    <Properties> 
     <Property> 
       <Name>PARTNER_CD</Name> 
       <Value>PET1</Value> 
     </Property> 
     <Property> 
       <Name>REJECT_AT_PUMP</Name> 
       <Value>true</Value> 
     </Property> 
     <Property> 
       <Name>MAX_LITRE</Name> 
       <Value>75</Value></Property> 
    </Properties> 

İstenilen Çıktı:

NAME    VALUE 
------------------------- 
PARTNER_CD   LOBT 
PARTNER_CD   PET1 

Bu denedim budur .. ben aldım

Select xmltype.createxml(EXT_PROPERTIES_XML).extract('/Properties/Property/Name/text()').getStringVal() as Name, 
xmltype.createxml(EXT_PROPERTIES_XML).extract('/Properties/Property/Value/text()').getStringVal() as Value 
    from card_type 

Çıktı oldu:

  Name       Value 
PARTNER_CDREJECT_AT_PUMPMAX_LITRE  LOBTtrue75 

Herhangi bir yardım gerçekten takdir edilmektedir. Teşekkürler.

cevap

1

Verileri ayıklamak için an XMLQuery or XMLTable kullanabilirsiniz:

select x.* 
from card_type c 
cross join xmltable('/Properties/Property' 
    passing xmltype(ext_properties_xml) 
    columns name varchar2(20) path 'Name', 
    value varchar2(20) path 'Value' 
) x 
where name = 'PARTNER_CD'; 

NAME     VALUE    
-------------------- -------------------- 
PARTNER_CD   LOBT     
PARTNER_CD   PET1