XMLtype的查詢操作:
查詢對象範例:表名:etab,第一列為varchar2() 名稱為id,第二列為xmltype 列名為xmlcol,其中一行為,id欄位的值為:aaxmlcol欄位的值為:
<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