You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ExtractValue SQL将XML节点多值返回为单独行?

问题场景

原XML数据

<Attributes>
    <Map>
       <entry key="ABC">
          <value>
           <List>
              <String>12 3</String>          
              <String>4 56</String>    
           </List>
         </value>
       </entry>
    </Map>
</Attributes>

原SQL语句

SELECT COALESCE(
                 ExtractValue(
                               attributes, 
                               '/Attributes/Map/entry[1]/value/List/String'), 
                'N/A'
                )
  FROM mytable

当前返回结果

12 3 4 56

需求

修改SQL,使每个<String>节点的内容单独占一行,即结果为两行:12 3和4 56


修改方案

针对Oracle数据库(原SQL使用ExtractValue,属于Oracle函数),可以使用XMLTable函数拆分XML节点,实现每行返回一个<String>的值:

SELECT COALESCE(x.str_val, 'N/A') AS str_val
FROM mytable t,
     XMLTable('/Attributes/Map/entry[1]/value/List/String'
              PASSING t.attributes
              COLUMNS str_val VARCHAR2(100) PATH '.') x

说明

  • XMLTable会遍历XPath表达式匹配到的所有<String>节点,每个节点对应一行结果
  • PASSING子句指定要解析的XML列(这里是mytable表的attributes列)
  • COLUMNS子句定义输出列的名称、数据类型,以及取值路径(.表示取当前节点的文本内容)
  • 保留COALESCE函数,确保当没有匹配到任何<String>节点时返回N/A

内容的提问来源于stack exchange,提问作者Naveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:27:38