Oracle XML DB with XMLEXISTS 不适用于根 XML 上的 xmlns



我有一个带有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
      )

相关内容

  • 没有找到相关文章

最新更新