1、Oracle存储XML数据的方法
大致来说分为两种:(1)XMLType、(2)普通的关系表。
(1)、其中XMLType的存储又可分为(a)基于XML模式(XML Schema)的存储、(b)非基于XML模式的存储。
(a)、基于XML模式的存储可为:(a1)XMLType表、(a2)XMLType列
(a1)、对于XMLType表存在是否使用XDB库,如果使用,就在XML模式中根据xdb:defaultTable定义的 XMLType;如果没有使用XDB库,就需要在SQL中定义XMLType表。
(a2)、对于XMLType列,是指表中的一列定义为XMLType
(b)、非基于XML模式的存储,是将XML数据存为CLOB中的XML类型
(2)、对于普通的关系表,则需要用到XSU,SQL/XML。
2、 Oracle数据操作方法
建表
创建一个包括XMLTYPE的字段的表
create table gao1 (
x1 xmltype
)
另外一种创建XMLTYPE的表的方法:
CREATE TABLE example2 of XMLType;
我们来看一下如何向包含XMLtype类型的table中新追加一条记录。
首先建立一个table
CREATE TABLE example2 of XMLType;
插入记录
然后准备插入一条记录,在插入记录之前,需要保证当前user具备CREATE ANY DIRECTORY的权限。
切换到其它用户下,如system,执行
GRANT CREATE ANY DIRECTORY TO XDB
(XDB是你作练习的用户)
再切换回XDB目录
执行如下命令:
CREATE OR REPLACE DIRECTORY XMLDIR AS 'D:\Oracle tudy\xdb'
准备插入一条新记录了(确保机器上存在'D:\Oracle tudy\xdb'目录,并且目录中有一个xml文件,文件名为'purchaseOrder.xml')
INSERT INTO example2
VALUES
(
xmltype
(
bfilename('XMLDIR', 'purchaseOrder.xml'),
nls_charset_id('AL32UTF8')
)
)
查询
create table XMLTable (doc_id number, xml_data XMLType);
insert into XMLTable values (1,
XMLType('<FAQ-LIST>
<QUESTION>
<QUERY>Question 1</QUERY>
<RESPONSE>Answer goes here.</RESPONSE>
</QUESTION>
</FAQ-LIST>'));
select extractValue(xml_data, '/FAQ-LIST/QUESTION/RESPONSE') -- XPath expression
from XMLTable
where existsNode(xml_data, '/FAQ-LIST/QUESTION[QUERY="Question 1"]') = 1;
建索引
create index XMLTable_ind on XMLTable
(extractValue(xml_data, '/FAQ-LIST/QUESTION/QUERY') );