【问题标题】:Oracle XML DB with XMLEXISTS don't work with xmlns on root XML带有 XMLEXISTS 的 Oracle XML DB 不适用于根 XML 上的 xmlns
【发布时间】:2017-09-10 06:25:06
【问题描述】:

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

【问题讨论】:

    标签: oracle-xml-db


    【解决方案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
          )
    

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2010-11-26
      • 1970-01-01
      • 2014-03-16
      • 2014-04-21
      相关资源
      最近更新 更多