Oracle中如何通过XML标签及id属性从CLOB列提取指定值
错误原因
- 第一条语句无返回是因为XPath筛选条件写法错误:你XML中的
id是Member节点的属性,而非子节点,需要用@前缀标识属性,你写的[id=1]是筛选「拥有值为1的<id>子节点」的Member节点,匹配不到自然无返回。 - 第二条语句返回拼接值是因为没有加筛选条件,会匹配所有
Member下的Name节点文本,自动拼接后就得到了JohnPeter。
正确写法
调整原extract写法
只需要把筛选条件改为[@id="1"]即可:
select xmltype(clob_column).extract('//Home/Member[@id="1"]/Name/text()').getStringVal() from MY_TABLE;
更推荐的标准写法(兼容Oracle新版本)
extract函数在新版Oracle中已被标记为弃用,推荐使用标准的XMLQUERY函数实现:
select XMLQUERY('/Home/Member[@id="1"]/Name/text()' PASSING xmltype(clob_column) RETURNING CONTENT).getStringVal() from MY_TABLE;
内容的提问来源于stack exchange,提问作者Ramnarong Pitth
相关产品推荐
相关产品推荐

