1. 程式人生 > >Oracle資料庫Clob型別儲存XML資料下節點內容查詢

Oracle資料庫Clob型別儲存XML資料下節點內容查詢

今天有個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
0529日</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解析錯誤異常