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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:04:57