XML DB简介
Oracle XML DB 是一组专门为 XML 开发的内置高性能存储和检索技术,首次随 Oracle9i 数据库第 2 版推出。OracleXML DB 将 World Wide Web Consortium (W3C) XML 数据模型完全吸收到 Oracle9i 数据库中,并为导航和查询 XML 提供了新的标准访问方法。可以同时获得关系数据库技术和 XML 技术的所有优势。Oracle XML DB 可用于存储、查询、更新、转换或处理 XML,并使用 SQL 查询访问相同的XML 数据。
验证是否安装了 XML DB
运行SQL:select comp_name from dba_registry where comp_name like '%XML%';若返回的数据为:COMP_NAME/Oracle XML Database 则证明已经安装XML DB
接下来可以进行XMLDB的操作了
向XMLType或者XMLType column数据表中存放数据
当需要要向Oracle9i数据库中存储XML文档时,可以采取如下的这些方法,包括:
1.在Oracle9i数据库外部将XML文档进行解析,将分析所得到的结果以行的形式存入一个或者多个表中。在这种场景下,数据库不知道正在处理的是XML格式的内容。
2.将XML文档存储在Oracle9i数据库的CLOB或者VARCHAR2字段。这种场景下数据库仍然无法知道正在处理XML文档。但是用户可以使用XDK编写程序来执行XML操作。
3.把XML文档作为XMLType数据类型存储在Oracle9i数据库中。
使用以下两种方式都是有效的:
将XML文档存储在XMLType数据列中。
将XML文档存储在XMLType数据表中。
采用以上两种方式存储就意味着数据库能够知道正在处理的数据是XML文档,使用这种方法来存放XML文档将给我们带来很大的方便,因为Oracle9i数据库中提供了一系列的新特性,这使得对XML数据进行高效的处理变成了可能。
创建一个带 XMLType 数据列的表
CREATE TABLE XMLCONTENT(
KEYVALUE varchar2(10) primary key,
XMLCOLUMN SYS.xmltype
);
创建一个XMLType表
CREATE TABLE XMLTABLE OF XMLType;
将XML文档转化XMLType实例,然后存储到XMLType表或者带XMLType数据列的表中
grant create any directory to xdb;
conn xdb/xdb
create directory XMLDIR as 'C:"oracle"XMLDB';
create or replace function getClobDocument(filename in varchar2,charset in varchar2 default NULL)
return CLOB deterministic
is
file bfile := bfilename('XMLDIR',filename);
charContent CLOB := ' ';
targetFile bfile;
lang_ctx number := DBMS_LOB.default_lang_ctx;
charset_id number := 0;
src_offset number := 1 ;
dst_offset number := 1 ;
warning number;
begin
if charset is not null then
charset_id := NLS_CHARSET_ID(charset);
end if;
targetFile := file;
DBMS_LOB.fileopen(targetFile, DBMS_LOB.file_readonly);
DBMS_LOB.LOADCLOBFROMFILE(charContent, targetFile,DBMS_LOB.getLength(targetFile), src_offset, dst_offset,charset_id, lang_ctx,warning);
DBMS_LOB.fileclose(targetFile);
return charContent;
end;
/
-- create XMLDIR directory-- connect system/manager-- create directory XMLDIR as '<location_of_xmlfiles_on_server>';
-- grant read on directory xmldir to public with grant option;
-- you can use getCLOBDocument() to generate a CLOB from a file containing
-- an XML document. For example, the following statement inserts a row into the
-- XMLType table Example2 created earlier:
创建函数后即可使用此函数进行数据导入,可以看出我们把路径设置在C盘,此时只需将需导入的文件放在C盘即可,然后运行以下方法即可
INSERT INTO XMLTABLE VALUES(XMLTYPE(getCLOBDocument('test.xml')));
注意Charset参数的使用,它用来确定指定文件的字符集,如果该参数被忽略,将默认采用当前数据库所采用的字符集,例如在文档test.xml中使用的UTF-8,它可以被装载到XMLType数据表XMLTABLE数据表中:
insert into xmltable values(xmltype(getClobDocument('test.xml','UTF-8')));
如果不使用Charset参数将默认使用ZHS16GBK.