使用Oracle db中的属性从XML中提取NCLOB的XML数据

时间:2015-05-17 04:02:58

标签: sql xml oracle xpath plsql

我正在尝试从Oracle数据库表中存储为NCLOB列的XML数据中提取值。

xml结构

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.com/FAS/DOC/2011/v3.0b" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <record xmlns="http://example.com/FAS/DOC/2011/v3.0b">
    <pdate xmlns="http://example.com/FAS/DOC/2011/v3.0b">2014-05-15</pdate>
  </record>
</root>

查询

select EXTRACTVALUE(XMLTYPE(nclob_column),'/root/record/pdate','xmlns="http://example.com/FAS/DOC/2011/v3.0b"') pdate1,
       EXTRACTVALUE(XMLTYPE(nclob_column),'/root/record/pdate') pdate2
from   nclob_table

问题

  

pdate1确实返回值,但pdate2返回null。一世   不能使用EXTRACTVALUE()的第三个参数来指定xmlns   属性值,因为每行/记录都会更改。所以我得到了   一行的值,但所有其他行的值为null。

如何在不指定属性的情况下提取值?

感谢。

1 个答案:

答案 0 :(得分:0)

如果您可以保证命名空间在这种情况下选择元素无关紧要,您可以使用local-name()仅通过它的本地名称匹配元素,忽略命名空间:< / p>

select EXTRACTVALUE(
            XMLTYPE(nclob_column),
            '/*[local-name()="root"]/*[local-name()="record"]/*[local-name()="pdate"]'
        ) pdate
from   nclob_table

<强> SQL Fiddle