Oracle函数在XML标记中搜索

时间:2012-06-14 09:39:48

标签: xml oracle

我有一张桌子:

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

在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>

我的要求是仅在REFERENCE REFSYSTEM =“SYSTEM1”时提取int值42852。你能帮我解决一下oracle函数的用途吗?

2 个答案:

答案 0 :(得分: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%';

有没有更好的方法来解决这个问题呢?

答案 1 :(得分:0)

您可以尝试:

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

Here是一个小提琴