我有一个带有XMLTYPE列的表,XMLEXIST工作正常。
但是当根元素有一个 xmlns 贡品时,XMLEXISTS 找不到我要找的记录。
如果没有 xmlns 属性,XMLEXISTS 可以正常工作。
怎么了?
例:
<employe>
<employe_id>12345</employe_id>
<employe_name>John</employe_name>
</employe>
查询:
SELECT count(*) FROM mytable
WHERE XMLEXISTS('/employe[employe_id="12345"]'
PASSING xmltype_col
)
结果:1
但是,对于根元素上的 xmlns 属性,查询返回 0。
<employe xmlns="http://www.example.com/version_01_01_00">
<employe_id>12345</employe_id>
<employe_name>John</employe_name>
</employe>
mytable 是无模式的。
经过大量研究,我发现了解决方案。
select *
from (
select
xmlelement("employe",
XMLATTRIBUTES('www.example.com/version_01_01_00' as "xmlns") ,
xmlforest(
'12345' as "employe_id",
'John' as "employe_name"
)
) test
from dual
) x
where XMLEXISTS(
'declare default element namespace "www.example.com/version_01_01_00"; (::)
/employe[employe_id="12345"]'
PASSING test
)