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

如何匹配ID为pTRAFC50的FreeCode节点并提取对应Value子节点值

问题解决:从XML中提取指定ID的FreeCode节点值

原代码的问题

  1. 依赖固定节点索引不可靠:用[7]定位FreeCode节点,一旦XML结构中节点顺序调整,代码直接失效
  2. XPath语法错误:@ID[7]完全错误——每个FreeCode节点仅拥有一个ID属性,无需索引;正确的筛选逻辑是通过属性值匹配节点,而非位置
  3. CASE语句不完整:缺少THEN分支和END关键字,存在语法错误

正确实现方案

方案1:使用EXTRACTVALUE(Oracle 11g及更早版本)

直接通过属性值筛选目标节点,提取其下的Value子节点内容:

SELECT 
    EXTRACTVALUE(XmlType(o.Xml), '/Equity/FreeCode[@ID="pTRAFC50"]/Value/text()') AS pTRAFC50_Value
FROM your_table o;

如果需要判断节点是否存在再返回值,可补充CASE逻辑:

SELECT 
    CASE 
        WHEN EXTRACTVALUE(XmlType(o.Xml), '/Equity/FreeCode[@ID="pTRAFC50"]') IS NOT NULL
        THEN EXTRACTVALUE(XmlType(o.Xml), '/Equity/FreeCode[@ID="pTRAFC50"]/Value/text()')
        ELSE NULL -- 可替换为你需要的默认值
    END AS pTRAFC50_Value
FROM your_table o;

方案2:使用XMLQuery(Oracle 12c+推荐,EXTRACTVALUE已被弃用)

SELECT 
    XMLQuery('/Equity/FreeCode[@ID="pTRAFC50"]/Value/text()' 
             PASSING XmlType(o.Xml) 
             RETURNING CONTENT).getStringVal() AS pTRAFC50_Value
FROM your_table o;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:30:10