Oracle9i之xmltype應(yīng)用(1)
介紹了oracle9i的xmltype數(shù)據(jù)類型的基本使用
包括:建立含有xmltype數(shù)據(jù)類型的表
插入(insert)數(shù)據(jù)
查詢(select)數(shù)據(jù)
更新(update)數(shù)據(jù)
添加超過(guò)4k字節(jié)的xml文檔到xmltype型字段
適合初學(xué)者。
關(guān)鍵詞: oracle9i xmltype
oracle從9i開(kāi)始支持一種新的數(shù)據(jù)類型---- xmltype,用于存儲(chǔ)和管理xml數(shù)據(jù),并提供了很多的functions,用來(lái)直接讀取xml文檔和管理節(jié)點(diǎn)。下面將介紹xmltype的一些基本使用。
1.建立含有xmltype數(shù)據(jù)類型的表
create table abc (id number,xmldoc sys.xmltype);
聲明xmltype型字段用:sys.xmltype
2.向帶有xmltype類型的表插入帶有數(shù)據(jù)
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字段里面的內(nèi)容
得到id=1的value變臉的值
select i.xmldoc.extract(''//name/a[@id=1]/@value'').getStringVal() as ennames, id from abc i
得到a節(jié)點(diǎn)的值
select id, i.xmldoc.extract(''//name/a/text()'').getStringVal() as truename from abc i
得到節(jié)點(diǎn)id屬性的值
Select hd.Data_t.extract(''/root/name/@id'').getStringVal() As Name FROM sehr_house_data hd
4.更新xmltype里面的數(shù)據(jù)
update abc set xmldoc=updateXML(xmldoc,''//name/a[@id=1]/@value'',''some new value'') where ......
(注意:如果里面沒(méi)有<a id="1">這個(gè)節(jié)點(diǎn),將不能update)
5.添加超過(guò)4k字節(jié)的xml文檔到xmltype型字段
可以通過(guò)使用臨時(shí)表的辦法實(shí)現(xiàn):
先建立一個(gè)臨時(shí)的表,其中的一個(gè)字段是clob類型;
再將要寫(xiě)入xmltype字段的xml doc寫(xiě)入這個(gè)臨時(shí)的clob型的字段中;
最后insert into abc (id,xmldoc) values (abc_q.nextval , sys.xmlType.createXML((select content from 臨時(shí)表 where id=......)));
Oracle 9i提供的XML內(nèi)置特性:
Oracle 9i支持XMLType類型,它是一種Oracle 9i系統(tǒng)定義的對(duì)象類型。XMLType有內(nèi)置的函數(shù),有力的提供了推XML的創(chuàng)建,索檢,索引等功能。
用戶可以使用SQL函數(shù)動(dòng)態(tài)的產(chǎn)生XML文檔。這些函數(shù)有:SYS_XMLGEN和SYS_XMLAGG和PL/SQL包DBMS_XMLGEN。
XML特性
描述
XMLType
1、XMLType是oracle系統(tǒng)定義的數(shù)據(jù)類型,系統(tǒng)預(yù)定義了內(nèi)部函數(shù)去訪問(wèn)XML數(shù)據(jù)。可以執(zhí)行下面的任務(wù):
2、創(chuàng)建XMLType列,在XMLType列上面使用內(nèi)置的函數(shù)。
創(chuàng)建PL/SQL函數(shù)和存儲(chǔ)過(guò)程,可以使用XMLType作為參數(shù)傳入,或者作為返回參數(shù)傳出。
3、在XMLType列上面存儲(chǔ)、索引、處理XML數(shù)據(jù)。
DBMS_XMLGEN
DBMS_XMLGEN是一個(gè)PL/SQL包,提轉(zhuǎn)換一個(gè)sql查詢的結(jié)果到標(biāo)準(zhǔn)的xml格式,返回的是一個(gè)XMLTye類型或者是CLOB,DBMS_GEN是用c語(yǔ)言實(shí)現(xiàn),放置在數(shù)據(jù)庫(kù)的內(nèi)核中。DBMS_XMLGEN包和DBMS_XMLQuery包的功能相相似。
SYS_XMLGEN
XMLGEN是一個(gè)SQL函數(shù),它用來(lái)在sql查詢中產(chǎn)生XML,DBMS_XMLGEN和其他包操作在查詢水平,
SYS_XMLGEN把一個(gè)值,對(duì)象類型,XMLType實(shí)例轉(zhuǎn)換成一個(gè)XML文檔。SYS_XMLGEN返回的類型是XMLType。
SYS_XMLAGG
SYS_XMLAGG 是一個(gè)聚合函數(shù),它聚合在XMLType類型上面。
SYS_XMLAGG聚合所有的輸入的XML文檔合片斷并且通過(guò)連接X(jué)ML片斷合增加上一層的標(biāo)簽產(chǎn)生單個(gè)XML文檔
UriTypes
UriType 類型家族能夠在數(shù)據(jù)庫(kù)中存儲(chǔ)和查詢Ur-refs,SYS.UriType是一抽象的數(shù)據(jù)類型,它提供功能去訪問(wèn)URL指向的數(shù)據(jù)。
SYS.HttpUriType和SYS.DBUriType是UriType的子類型。SYS.HttpUriType存儲(chǔ)的是HTTP URLs,DBUriType存儲(chǔ)的是intra-database 參考。你可以定義自己的SYS.UriType的子類型。
如何使用XMLType
創(chuàng)建XMLType列:
CREATE TABLE warehouses(
warehouse_id NUMBER(3),
warehouse_spec SYS.XMLTYPE,
warehouse_name VARCHAR2(35),
location_id NUMBER(4));
插入XMLType列數(shù)據(jù)
INSERT into warehouses (warehouse_id, warehouse_spec) VALUES (1001, sys.XMLType.createXML(
’<Warehouse whNo="100">
<Building>Owned</Building>
</Warehouse>’));
createXML的輸入?yún)?shù)可以是任何的返回為varch
ar2的表達(dá)式或者式CLOB。CreateXML能夠檢測(cè)XML是否的符合合適的,但是它不能檢查XML的有效性。
使用在XMLType列上sql查詢
SELECT
w.warehouse_spec.extract(''/Warehouse/Building/text()'').getStringVal()
"Building"
FROM warehouses w
warehouse_spec是一個(gè)XMLType列,
Extract()是操作在上面的函數(shù)
查詢結(jié)果如下:
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’;
開(kāi)心過(guò)好每一天。。。。。