【问题标题】:Extracting XML data from NCLOB from XML with attributes in Oracle db从具有 Oracle db 中的属性的 XML 中提取 NCLOB 中的 XML 数据
【发布时间】:2015-05-17 04:02:57
【问题描述】:

我正在尝试从存储为 Oracle db 表中 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。

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

谢谢。

【问题讨论】:

    标签: sql xml oracle xpath plsql


    【解决方案1】:

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

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

    SQL Fiddle

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多