在Oracle的XMLType裏查詢數據

XMLtype的查詢操作:
查詢對象樣例:表名:etab,第一列爲varchar2() 名稱爲id,第二列爲xmltype 列名爲xmlcol,
其中一行爲,id字段的值爲:aa
xmlcol字段的值爲:
<ProductMetaData>
    <SatelliteID>02B</SatelliteID>    
    <ReceiveStationID>BRA</ReceiveStationID>
    <SensorID aa='ExAttr'>CCD</SensorID>
    <ReceiveTime>2003-06-30 22:12:24</ReceiveTime>
    <OrbitID>448</OrbitID>
</ProductMetaData>


 
1:extract
作用:提取出XML串中指定節點的值(包含節點兩端的標記),結果還是爲clob的格式
可用column.extract('//xxx/xx'),或extract(column,'//xxx/xx')的語法
    例如: 
    select t.id,t.xmlcol.extract('//ProductMetaData/SensorID') from etab t
    select t.id,extract(t.xmlcol,'//ProductMetaData/SensorID') from etab t
    提取出的內容爲(仍爲CLOB的格式): <SensorID aa='ExAttr'>BRA</SensorID> 
 
還可以在之後加上/text()獲取其內部文字(結果還是爲clob的格式)
    例如: 
    select t.id,t.xmlcol.extract('//ProductMetaData/SensorID/text()') from etab t
    提取出的內容爲(仍爲CLOB的格式):BRA
 
或在之後加上/@att獲取節點的屬性值
    例如:
    select t.id,t.xmlcol.extract('//ProductMetaData/SesorID/@aa') from etab t
    提取出的內容爲(仍爲CLOB的格式):ExAttr
 
對於查找到的結果,可以使用getnumberval()或getstringval()函數將結果轉化爲需要的文字或數字
    例如: 
    select t.id,t.xmlcol.extract('//ProductMetaData/SensorID/text()').getstringval() from etab t
    提取出的內容爲(文本格式):BRA
 
    select t.id,t.xmlcol.extract('//ProductMetaData/OrbitID/text()').getnumberval() from etab t
    提取出的內容爲(數字格式,可用於條件判斷,例如大於小於):448
 
    提取內容作爲條件判斷:
    select t.id from etab t where t.xmlcol.extract('//ProductMetaData/OrbitID/text()').getnumberval() > 440
 
2.extactrvalue
作用:提取出XML串中指定節點的值(不包含節點兩端的標記),結果爲文本格式(如果值是數字的話,好像也可以認爲是數字格式,也能用於查詢裏的條件判斷)
只能使用extractvalue(column,'//xxx/xx')的格式
    例如:
    select t.id,extractvalue(t.xmlcol,'//ProductMetaData/SensorID') from etab t
    提取出的內容爲文本格式的PMS
    
    select t.id from etab t where t.xmlcol.extract('//ProductMetaData/OrbitID/text()').getnumberval() > 2440
 
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章