如何从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
相关产品推荐
相关产品推荐

