Oracle数据库XML字段SQL查询:提取属性对应值为列
Oracle XML字段提取:从带属性的field节点中提取值为列
方法1:使用XMLQUERY逐个提取列
直接针对每个目标字段编写XMLQUERY,通过XPath筛选带指定name属性的field节点:
SELECT "Date", "Time", Guest, XMLQUERY('/table/row/field[@name="main"]/text()' PASSING Meal RETURNING CONTENT) AS Main, XMLQUERY('/table/row/field[@name="side"]/text()' PASSING Meal RETURNING CONTENT) AS Side, XMLQUERY('/table/row/field[@name="dessert"]/text()' PASSING Meal RETURNING CONTENT) AS Dessert FROM Party;
关键XPath说明:
/table/row/field:定位XML结构中field节点的完整路径[@name="main"]:筛选name属性等于main的field节点/text():提取该节点的文本内容
方法2:使用XMLTABLE批量提取(更高效)
如果需要提取多个字段,XMLTABLE可以一次性解析XML,代码更简洁且性能更优:
SELECT p."Date", p."Time", p.Guest, x.Main, x.Side, x.Dessert FROM Party p, XMLTABLE('/table/row' PASSING p.Meal COLUMNS Main VARCHAR2(100) PATH 'field[@name="main"]/text()', Side VARCHAR2(100) PATH 'field[@name="side"]/text()', Dessert VARCHAR2(100) PATH 'field[@name="dessert"]/text()' ) x;
说明:
- XMLTABLE的
/table/row定位到XML的行节点 COLUMNS子句定义每个输出列的名称、数据类型,以及对应的XPath路径- 这种方式避免了多次解析同一个XML字段,适合多列提取场景
内容的提问来源于stack exchange,提问作者Pastor_Disaster
相关产品推荐
相关产品推荐

