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