Oracle資料庫Clob型別儲存XML資料下節點內容查詢
阿新 • • 發佈:2019-02-14
今天有個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解析錯誤異常