Oracle9i之xmltype应用(1)


介绍了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=......)));

 

 

 

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的输入参数可以是任何的返回为varch


ar2的表达式或者式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’;

 



开心过好每一天。。。。。