2017-04-14 9 views
0

XMLTYPE列を持つ表があり、XMLEXISTは正常に動作します。XMLEXISTSを使用したOracle XML DBがルートXMLのxmlnsで機能しない

しかし、ルート要素に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はscheです悪人。

答えて

0

多くの研究の後、私は解決策を発見しました。

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 
    ) 
関連する問題