xmltype資料類演練及讀取效率測算

ocpDBAboy發表於2015-06-17

xmltype 預定義的物件型別

--1.演練部分
--用於儲存和操作xml資料
--建立一個可以裝xml的表
create table fallsxml(
fall_id number,
fall_xml xmltype
);

--使用靜態方法CreateXML 插入第1條xml記錄
INSERT INTO fallsxml
VALUES
  (1,
   xmltype.CreateXML('
      
          Munising Falls
          Alger
          MI
         
             [url][/url]
         

      
'));
      
--插入第2條xml記錄        
INSERT INTO fallsxml
VALUES
  (2,
   XMLType.CreateXML('
 
    Au Train Falls
    Alger
    MI
   
       [url][/url]
   

 
'));

--插入第3條xml記錄
INSERT INTO fallsxml
VALUES
  (3,
   XMLType.CreateXML('
        
            Laughing Whitefish Falls
            Alger
            MI
        
'));
--檢視插入的記錄,使用existsNode()方法檢索節點
select t.*,rowid from fallsxml t;
select fall_id from fallsxml f where f.fall_xml.existsNode('/fall/url')>0;--存在fall/url    
select fall_id from fallsxml where existsNode(fall_xml,'/fall/url')>0;--fall列中存在fall下面有url的

--抽取xml的文字並輸出(獲得指定字元,採用靜態方法extract )
--在plqldev中執行報錯(去掉2個demo_block即可),在sqlplus中正確
<>
declare
  v_xml xmltype;
  url   varchar2(500);
begin
  --查詢xml記錄into給變數v_xml
  select t.fall_xml into demo_block.v_xml from fallsxml t where t.fall_id = 1;
  --從取到的xml記錄中,抽取extract 節點值
  url := v_xml.extract('/fall/url/text()').getStringVal();
  dbms_output.put_line(url);
end;
/
--輸出 [url][/url]
注:v_xml.extract('/fall/url/text(  )').getStringVal 呼叫靜態方法extract提取相應資料,也就是提供根目錄下的url子目錄下的文字,text()指url的體部文字。geteStringVal是文字的值。
select Upper(Xmltype.getStringVal(xmltype.extract(fall_xml,'/fall/url/text()'))) from fallsxml
        where existsNode(fall_xml,'/fall/url')>0;
上面的是將查詢出來的html地址變為大寫     


2.效率測算部分

---測試程式碼:
--xmltype()執行效率測算
select f_gettime(fall_xml, '/fall/url', 10000)
  from fallsxml
 where rownum = 1;
--返回值:
+000000000 00:00:00.485000000||
               [url][/url]
           
測試函式程式碼:
create or replace function f_gettime(sb in xmltype,path in varchar2,a in number:=10000) return varchar2 is
  cc xmltype;
  v_time timestamp;
begin
  v_time:=current_timestamp;
  for i in 1..a loop
   cc:=sb.extract(path);
    end loop;
  return to_char(current_timestamp-v_time) || '||' ||cc.getStringVal();
end f_gettime;
select xmltype(ts_clob).extract('/ROWDATA/ROW/ID2/text()') from ts_clob where rownum=1;--xmltype()執行效率
select extract(xmltype(ts_clob),'/ROWDATA/ROW/ID2/text()') from ts_clob where rownum=1;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29267792/viewspace-1702052/,如需轉載,請註明出處,否則將追究法律責任。

相關文章