我有一张桌子:
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函数的用途吗?
答案 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是一个小提琴