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

Oracle 11g中使用EXTRACTVALUE提取XML自闭合标签属性值返回空结果的技术求助

解决Oracle 11g中EXTRACTVALUE提取XML属性返回空的问题

嘿,我完全懂你碰到的这个坑!问题出在你对XPath的用法上——你要提取的taskCode不是节点的文本内容,而是节点的属性,原来的XPath路径没指定要取属性,所以返回空是正常的。

为什么原来的代码不行?

你的XML里<taskCode taskCode="204-1"/>是自闭合标签,taskCode="204-1"是这个节点的属性,不是节点内部的文本值。而你写的/templatesLists/templates/taskCode是在找这个节点的文本内容,自然就返回空了。

修正后的代码

只需要在XPath里加上@符号来指定要提取的属性,修改后的PL/SQL代码如下:

SELECT EXTRACTVALUE(XMLType(v_XML_TEST), '/templatesLists/templates/taskCode/@taskCode') 
INTO v_RESULT 
FROM DUAL;
DBMS_OUTPUT.PUT_LINE (v_RESULT); -- 现在会输出"204-1"

额外建议:替代废弃的EXTRACTVALUE

顺便提一句,EXTRACTVALUE在Oracle 12c之后已经被官方标记为废弃了,如果你以后升级版本或者想写更规范的代码,推荐用XMLQUERY或者XMLTABLE。比如用XMLQUERY的写法:

SELECT XMLQUERY('/templatesLists/templates/taskCode/@taskCode' PASSING XMLType(v_XML_TEST) RETURNING CONTENT).getStringVal()
INTO v_RESULT
FROM DUAL;

这样不仅能解决当前问题,也能避免以后版本兼容性的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:12:37