XMLTABLE 对于单次和多次查找返回 Null

问题描述 投票:0回答:1

我在这里进行了广泛的搜索,以获取有关解析 XML 字段的类似查询,这些字段预计会返回 1 个或多个相同的标签。在尝试解析多行之前,我已尝试导出至少一条记录,但它仍然返回 Null。

此时,我完全不明白为什么会发生这种情况。

来自列名称“XMLPref”的 XML 示例:

<ParentProfiler>
  <SettingExp>
    <Entity name="companycode" type="robot" value="fn8ks92in"></Entity>
    <Entity name="locationcode" type="dummy" value="CO"></Entity>
    <Entity name="companycode" type="dummy" value="0xm9n4mdk"></Entity>
  </SettingExp>
</ParentProfiler>

我正在尝试用

<Entity>
解析所有
name = "companycode"
标签并检索与它们关联的值。其他一些 XML 非常大,因此我将上面的 XML 简化为仅三个实体。

我下面的测试查询是尝试使用旧的

extractvalue(xmltype
方法和
XMLTABLE
方法。

测试查询:

select z.test1, z.test2, b.XMLPref 
,extractvalue(xmltype(b.XMLPref),'//ParentProfiler/SettingExp/Entity[@name="companycode"]/@value[0]') as TestingOldMethod
from test.XMLTABLE b,
XMLTABLE('/ParentProfiler/SettingExp'
    PASSING XMLTYPE(b.XMLPref)
    COLUMNS test1  VARCHAR2(100)  PATH 'Entity[@name="companycode"]/text()' --'Entity/text()'
           ,test2  VARCHAR2(100)  PATH 'Entity[1]' -- 'Values/string-join(./Entity/text(), ",")',
    ) z

尝试路径的不同变体后,无论是单个解析(第一次迭代)还是多个解析,都会返回 NULL。有人可以帮忙吗?

xml oracle parsing extract xmltable
1个回答
0
投票

您可以转到 XPath 中的(已过滤的)

Entity
节点,然后从中获取
values
属性:

XMLTABLE(
  '/ParentProfiler/SettingExp/Entity[@name="companycode"]'
  PASSING XMLTYPE(b.XMLPref)
  COLUMNS value  VARCHAR2(100)  PATH '@value'
)

例如,保留令人困惑的

xmltable
表名称:

select x.value
from xmltable b
cross apply XMLTABLE(
  '/ParentProfiler/SettingExp/Entity[@name="companycode"]'
  PASSING XMLTYPE(b.XMLPref)
  COLUMNS value  VARCHAR2(100)  PATH '@value'
) x
价值
fn8ks92in
0xm9n4mdk

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.