Oracle使用EXTRACTVALUE函数解析XML

Oracle使用EXTRACTVALUE函数解析XML

需求是将oracle数据库中将clob类型保存的xml文本在视图中解析传递给其他程序.
解析xml的方法有很多, 各种语言都有支持, 我曾试图通过java解析后再传递, 后来我发现oracle的extractvalue也可以实现, 在oracle数据库的视图中直接使用就可以了.
下面我先介绍extractvalue解析的两种方式.

XML节点中含属性

<AAA>
	<BBB id = "b1"/>
	<BBB id = "b2">
    	好转
    </BBB>
	<BBB name = "bbb"/>
	<BBB/>
</AAA>

以上内容保存在表binglinrjilunr字段, 其数据类型为clob, 如果我需要取节点<BBB id = "b2">好转</BBB>内的值, 只需以下的语句即可, 结果值为好转

SELECT extractvalue(XMLTYPE(b.jilunr),'/AAA/BBB[@id="b2"]') FROM binglinr B

XML节点中没有属性,且多个重复

<AAA>
	<BBB>
    	治愈
 	</BBB>
    <BBB>
    	好转
    </BBB>
	<BBB>
    	其他
    </BBB>
</AAA>

如果要获取指定节点的值, 只需指定节点的序号即可, 比如我要获取好转的值,

SELECT extractvalue(XMLTYPE(b.jilunr),'/AAA/BBB[2]') FROM binglinr B

终极方案 从Oracle官网说起

Oracle官网的说明EXTRACTVALUE
如上文sql语句中所写, 传入的第二个参数是xmlxpath_string, 实际中只要满足xml的xPath解析规则都可以实现节点内容的获取, 具体的解析规则, 可以参考这篇文章xml的xPath解析规则

注意事项

实际使用中, 不应直接在sql语句中使用, 最好写一个函数, 当extractvalue解析出现异常情况(比如返回了多个节点)时以其他字符返回.

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值