1

我有一个带有 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 是无模式的。

4

1 回答 1

1

经过大量研究,我找到了解决方案。

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
      )
于 2017-04-14T11:28:36.233 回答