2008年8月5日星期二

ORACLE XML DB 系列(4)

使用xmltype存储数据

ORACLE通过内置的XMLTYPE数据类型来存储XML数据。如何正确的设置数据库表中的XMLTYPE字段的存储方式就成了正确使用XML DB的关键。CLOB型存储格式可以避免将XML数据拆散存储,而对象表的存储方式则更有利于我们进行节点级的搜索。


sqlstr:='CREATE TABLE '||mdbid||'_md (MDRID VARCHAR2(10) NOT NULL,
CREATETIME DATE NOT NULL,LASTUPDTIME DATE NOT NULL,MDXML XMLTYPE NOT NULL) XMLTYPE COLUMN MDXML STORE AS OBJECT RELATIONAL XMLSCHEMA "http://xmlns.oracle.com/xdb/schemas/'||rolename||'/'||xsdurl||'" ELEMENT "'||rootElement||'"';

execute immediate sqlstr;


XMLTYPE COLUMN MDXML STORE AS OBJECT RELATIONAL这是用来指定XMLTYPE以对象类型来存储,XMLTYPE COLUMN MDXML STORE AS CLOB是使用CLOB来存储XMLTYPE。在ORACLE11g中我们还可以使用二进制的存储方式来存储XMLTYPE。


如果在建表的SQL语句中指定了XMLSCHEMA,那么数据表中的XMLTYPE就是以基于SCHEMA的方式来存储。上面所展示的sql中 rolename是schema所在的用户,xsdurl是我们在注册schema的时候为它起的id,而rootElement是要我们指定XML的根元素。
到此为止,在数据库中存储XML的前期准备工作都已经就绪,只差将XML数据插入到已经建好的数据表中。向数据表中插入XML数据可以使用以下语句:


insert into tablename values('1',sysdate,sysdate,xmltype(xmlcontent))

我们可以将这条语句中的XMLTYPE理解为构造函数,如果是基于SCHEMA的XMLTYPE,必须使用以下语句:


insert into tablename values('1',sysdate,sysdate,xmltype(xmlcontent,xsdid))


或者使用以下语句:
insert into tablename
values('1',sysdate,sysdate,xmltype(xmlcontent).createSchemaBasedXML(xsdid))


当然还有别的方式可以实现XMLTYPE数据的插入,在这里就不一一详述了。

没有评论: