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

如何从Oracle XML类型列提取数据并按行返回选项值?

解决XMLTABLE查询中

这问题我之前也碰到过!你现在的查询是直接取了整个<options>节点的文本内容,Oracle会自动把节点下所有子元素的文本拼接起来返回,所以才会得到Sel1Sel2Sel3这种合并后的结果。要让每个选项单独成行,只需要调整XMLTABLE的XPath,让它遍历每个<option>子节点就行。

修改后的查询语句

select xt.* 
from ST3_ENT1_REG4.custom_field cf, 
     XMLTABLE('/select/options/option' 
              PASSING cf.data_model_xml 
              COLUMNS option_value VARCHAR2(20) PATH '.' ) xt 
where field_name='c_f_2441_select_dev';

关键调整说明

  • 把XMLTABLE的基础XPath从/select改成了/select/options/option:这样会逐个匹配XML里的每个<option>元素,而不是只匹配外层的<select>节点
  • 使用PATH '.'(或者PATH 'text()'):用来获取每个<option>元素内部的文本内容,确保每个选项值单独返回一行

扩展:同时获取

如果需要同时拿到<option>的code或status属性,还可以在COLUMNS里添加对应的字段:

select xt.* 
from ST3_ENT1_REG4.custom_field cf, 
     XMLTABLE('/select/options/option' 
              PASSING cf.data_model_xml 
              COLUMNS option_code VARCHAR2(20) PATH '@code',
                      option_status VARCHAR2(1) PATH '@status',
                      option_value VARCHAR2(20) PATH '.' ) xt 
where field_name='c_f_2441_select_dev';

这样执行后,每个<option>的属性和文本值都会单独成一行展示啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:31:48