今天有个sql查询用到了在clob类型下查询xml数据某个节点值,通过百度后在这里记录一下
xml数据格式如下:
<?xml version="1.0" encoding="GBK"?>
<flowdoc>
<meta name="subject">529测试66</meta>
<meta name="authordept">系统维护</meta>
<meta name="authorname">xxx</meta>
<meta name="createdtime">2015年05月29日</meta>
<item name="parentorgid">D:0</item>
<item name="remark"></item>
<item name="zzr_name"></item>
<item name="tel">18905810303</item>
<item name="zzr_loginname"></item>
<item name="maindept_id">D:262</item>
<item name="columnid">760</item>
<item name="maindept_value">系统维护;D:262</item>
<item name="maindept_name">系统维护</item>
<item name="zzbm"></item>
<item name="szbm_id"></item>
<item name="content"></item>
<item name="num">网络运建</item>
<item name="signdept_id"></item>
<item name="signdept_value"></item>
<item name="signdept"></item>
<item name="szbm"></item>
<item name="v_UpperDept">0</item>
<item name="signdept_name"></item>
<item name="zzbm_id"></item>
<item name="maindept">系统维护</item>
</flowdoc>
Oracle数据库提供了extract、extractvalue、xmltype函数用来获取xml节点值
extractvalue:
sql语句:select extractvalue(xmltype(t.bodyxml),’/flowdoc/item[@name=”num”]’) as num
from tablename t where docid=’452EEDE9BCBC0039446FCDF1F55EA96A’ and DBMS_LOB.GETLENGTH(bodyxml)>0
查询结果返回:
网络运建
说明:条件DBMS_LOB.GETLENGTH(bodyxml)>0是因为数据可能为空,所以这里通过该函数判断值是否存在,因为不加该判断前面的条件查询遇到空值对象会报xml解析错误异常