程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle9i之xmltype應用

Oracle9i之xmltype應用

編輯:Oracle數據庫基礎
Oracle9i之XMLtype應用(1)
2007年07月12日 星期四 14:52



這幾天在研究9I下的XMLTYPE數據類型,這在解析和查找生成XML方面都很方便,在網上搜到了一篇入門級的文章,轉貼下來^_^(有幾個地方小改了一下。)


[文章摘要]介紹了Oracle9i的XMLtype數據類型的基本使用
包括:建立含有XMLtype數據類型的表
插入(insert)數據
查詢(select)數據
更新(update)數據
添加超過4k字節的xml文檔到XMLtype型字段
適合初學者。


關鍵詞: Oracle9i XMLtype


Oracle從9i開始支持一種新的數據類型---- xmltype,用於存儲和管理xml數據,並提供了很多的functions,用來直接讀取xml文檔和管理節點。下面將介紹XMLtype的一些基本使用。

1.建立含有XMLtype數據類型的表
create table abc (id number,xmldoc sys.XMLtype);
聲明xmltype型字段用:sys.XMLtype

2.向帶有XMLtype類型的表插入帶有數據
insert into abc (id,xmldoc) value (abc.nextval , sys.xmlType.createXML(''<name><a id="1" value="some values">abc</a></name>'') );
插入用 sys.xmlType.createXML(''some XML doc'')

3.直接查詢XMLtype字段裡面的內容
得到id=1的value變臉的值
select i.XMLdoc.extract(''//name/a[@id=1]/@value'').getStringVal() as ennames, id from abc i


得到a節點的值
select id, i.XMLdoc.extract(''//name/a/text()'').getStringVal() as truename from abc i

得到節點id屬性的值

Select hd.Data_t.extract(''/root/name/@id'').getStringVal()    As Name FROM sehr_house_data hd

4.更新XMLtype裡面的數據
update abc set xmldoc=updateXML(XMLdoc,''//name/a[@id=1]/@value'',''some new value'') where ......
(注意:如果裡面沒有<a id="1">這個節點,將不能update)

5.添加超過4k字節的xml文檔到XMLtype型字段
可以通過使用臨時表的辦法實現:
先建立一個臨時的表,其中的一個字段是clob類型;
再將要寫入xmltype字段的XML doc寫入這個臨時的clob型的字段中;
最後insert into abc (id,xmldoc) values (abc_q.nextval , sys.xmlType.createXML((select content from 臨時表 where id=......)));


Oracle9i之XMLtype應用(2)
2007年07月12日 星期四 15:25

Oracle 9i提供的XML內置特性:

Oracle 9i支持XMLType類型,它是一種Oracle 9i系統定義的對象類型。XMLType有內置的函數,有力的提供了推XML的創建,索檢,索引等功能。

用戶可以使用SQL函數動態的產生XML文檔。這些函數有:SYS_XMLGEN和SYS_XMLAGG和PL/SQL包DBMS_XMLGEN。

XML特性

描述

XMLType

1、XMLType是Oracle系統定義的數據類型,系統預定義了內部函數去訪問XML數據。可以執行下面的任務:

2、創建XMLType列,在XMLType列上面使用內置的函數。

創建PL/SQL函數和存儲過程,可以使用XMLType作為參數傳入,或者作為返回參數傳出。

3、在XMLType列上面存儲、索引、處理XML數據。

 

DBMS_XMLGEN

DBMS_XMLGEN是一個PL/SQL包,提轉換一個sql查詢的結果到標准的xml格式,返回的是一個XMLTye類型或者是CLOB,DBMS_GEN是用c語言實現,放置在數據庫的內核中。DBMS_XMLGEN包和DBMS_XMLQuery包的功能相相似。

SYS_XMLGEN

XMLGEN是一個SQL函數,它用來在sql查詢中產生XML,DBMS_XMLGEN和其他包操作在查詢水平,

SYS_XMLGEN把一個值,對象類型,XMLType實例轉換成一個XML文檔。SYS_XMLGEN返回的類型是XMLType。

 

SYS_XMLAGG

SYS_XMLAGG 是一個聚合函數,它聚合在XMLType類型上面。

SYS_XMLAGG聚合所有的輸入的XML文檔合片斷並且通過連接XML片斷合增加上一層的標簽產生單個XML文檔

 

UriTypes

UriType 類型家族能夠在數據庫中存儲和查詢Ur-refs,SYS.UriType是一抽象的數據類型,它提供功能去訪問URL指向的數據。

SYS.HttpUriType和SYS.DBUriType是UriType的子類型。SYS.HttpUriType存儲的是HTTP URLs,DBUriType存儲的是intra-database 參考。你可以定義自己的SYS.UriType的子類型。

 

如何使用XMLType

創建XMLType列:

CREATE TABLE warehouses(

warehouse_id NUMBER(3),

warehouse_spec SYS.XMLTYPE,

warehouse_name VARCHAR2(35),

location_id NUMBER(4));

插入XMLType列數據

INSERT into warehouses (warehouse_id, warehouse_spec) VALUES (1001, sys.XMLType.createXML(

’<Warehouse whNo="100">

<Building>Owned</Building>

</Warehouse>’));

createXML的輸入參數可以是任何的返回為varchar2的表達式或者式CLOB。CreateXML能夠檢測XML是否的符合合適的,但是它不能檢查XML的有效性。

使用在XMLType列上sql查詢

SELECT

w.warehouse_spec.extract(''/Warehouse/Building/text()'').getStringVal()

"Building"

FROM warehouses w

warehouse_spec是一個XMLType列,

Extract()是操作在上面的函數

查詢結果如下:

Building

-----------------

Owned

更新XMLType的列

UPDATE warehouses SET warehouse_spec =

sys.XMLType.createXML(

’<Warehouse whono="200">

<Building>Leased</Building>

</Warehouse>’));

刪去XMLType的列

DELETE FROM warehouses e

WHERE e.warehouse_spec.extract(’//Building/text()’).getStringVal()

= ’Leased’;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved