2012-06-14 89 views
0

我有一個表:甲骨文功能,在XML標籤搜索

create table app_instr(
deal  NUUMBER 
XML_DATA SYS.XMLTYPE 
); 

,並有下列2行中XML_DATA列:

<INSTR> 
<EXTREFERENCE xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> 
    <REFERENCE REFSYSTEM="SYSTEM1" AUTOCAPTURED="false" READONLY="false">42852 
    </REFERENCE> 
</EXTREFERENCE> 
</INSTR> 

<INSTR> 
<EXTREFERENCE xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> 
    <REFERENCE REFSYSTEM="SYSTEM2" AUTOCAPTURED="false" READONLY="false">42852 
    </REFERENCE> 
</EXTREFERENCE> 
</INSTR> 

我的要求是,提取int值42852僅參考REFSYSTEM = 「SYSTEM1」。你能幫我一下,使用這個oracle函數嗎?

回答

0

我可以通過運行以下查詢來做到這一點:

select x.deal, 
     x.xml_data.extract('/INSTR/EXTREFERENCE/REFERENCE/text()').getStringVal() 
from app_instr x 
where x.deal_no = 12334 
and x.xml_data.extract('/INSTR/EXTREFERENCE/*').getStringVal() like '%SYSTEM1%'; 

有沒有更好的辦法做到這一點,因爲這是給我的性能問題?

0

你可以試試:

SELECT deal, 
     extract(xml_data, '//REFERENCE/text()').getstringval() 
FROM app_instr 
WHERE extract(xml_data, '//REFERENCE[@REFSYSTEM="SYSTEM1"]/text()') IS NOT NULL; 

Here是小提琴