0

我有一张桌子:

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

并在 XML_DATA 列中有以下 2 行:

<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函数来做这个吗?

4

2 回答 2

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%';

有没有更好的方法来做到这一点,因为这会给我带来性能问题?

于 2012-06-14T10:20:49.830 回答
0

你可以试试:

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

是一个小提琴

于 2012-06-14T11:57:10.293 回答