`
wuhuizhong
  • 浏览: 681254 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

Oracle XML DB之浅入浅出

阅读更多

http://www.hellodba.com/Doc/oracle_xml_db.htm

 

 

备注:XML DBOracle 9.2中出现的新特性。

1         XML DB安装

通过DBCA安装

 

2         XML DB数据处理

2.1    存储XML数据到XML表中

2.1.1创建一个有XMLType类型字段的表:

create table xmlcontent (keyvalue varchar2(10) primary key,

                                       xmlvalue xmltype);

 

2.1.2创建一个XMLType类型表

create table xmltable of xmltype;

 

2.1.3XML文件中读取数据存储到XML表中

创建Directory指向存放XML文件的路径:

SQL> grant create any directory to xdb;

Grant succeeded.

SQL> conn xdb/xdb

Connected.

SQL> create directory XMLDIR as 'C:\oracle\XMLDB';

Directory created.

 

创建存储过程,从XML文件中读取数据存储到XML表中

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;

 /

-- you can use getCLOBDocument() to generate a CLOB from a file containin

-- an XML document. For example, the following statement inserts a row into the

-- XMLType table Example2 created earlier:

 

向表中插入数据:

SQL> INSERT INTO XMLTABLE

  2  VALUES(XMLTYPE(getCLOBDocument('init.xml')));

1 row created.

SQL> INSERT INTO XMLContent

  2  VALUES(1, XMLTYPE(getCLOBDocument('init.xml', 'UTF8')));

1 row created.

SQL> commit;

Commit complete.

 

2.2    更新XML表数据

2.2.1普通Update方式

 

SQL> UPDATE XMLTABLE X SET VALUE(X)=XMLTYPE(getCLOBDocument('init.xml'));

1 row updated.

 

SQL> UPDATE XMLContent SET xmlvalue=XMLTYPE(getCLOBDocument('init.xml'))

  2  WHERE keyvalue='1';

1 row updated.

 

SQL> commit;

Commit complete.

 

2.2.2使用updatexml()更新节点值

SQL> UPDATE xmlcontent

  2      SET xmlvalue = updateXML(xmlvalue,

  3                             '/sqlstress/config/userName/text()',

  4                             'shanxi')

  5      WHERE existsNode(xmlvalue,

  6         '/sqlstress/config[userName="shanxi806"]') = 1;

1 row updated.

 

SQL> commit;

Commit complete.

 

SQL> select extractvalue(xmlvalue,'/sqlstress/config/userName')

  2  from xmlcontent;

EXTRACTVALUE(XMLVALUE,'/SQLSTRESS/CONFIG/USERNAME')

---------------------------------------------------------------------

shanxi

 

2.2.3使用updatexml()更新一个节点树

SQL> UPDATE xmlcontent

  2    SET xmlvalue =

  3    updateXML(xmlvalue,

  4              '/sqlstress/functions/function[1]/parameters/prameter[2]/valuecope',

  5              xmltype('<valueScope rangeType="RANGE" dataType="int">

  6                          <minValue>

  7                              13111111111

  8                          </minValue>

  9                          <maxValue>

 10                              13999999999

 11                          </maxValue>

 12                      </valueScope>'

 13               )

 14    )

 15    WHERE existsNode(xmlvalue,

 16          '/sqlstress/functions/function[1]/parameters/parameter[@pid=2]'

 17    ) = 1;

 

1 row updated.

2.3    XML表中读取数据

主要利用extract(), extractValue(), and existsNode()等几个函数。”Init.xml”的内容参见附录。

2.3.1existsNode ()

EXISTSNODE函数检查XML中的某一个节点是否存在。如果存在,返回1,否则返回0

SQL> SELECT existsNode(value(X),'/sqlstress/config/connURL')

  2     FROM XMLTABLE X;

EXISTSNODE(VALUE(X),'/SQLSTRESS/CONFIG/CONNURL')

------------------------------------------------

                                               1

 

SQL> SELECT existsNode(value(X),'/sqlstress/config/connURLFalse')

  2     FROM XMLTABLE X;

EXISTSNODE(VALUE(X),'/SQLSTRESS/CONFIG/CONNURLFALSE')

-----------------------------------------------------

                                                    0

 

SQL> SELECT existsNode(xmlvalue,'/sqlstress/config/connURL')

  2    FROM XMLContent X

  3   WHERE keyvalue = '1';

EXISTSNODE(XMLVALUE,'/SQLSTRESS/CONFIG/CONNURL')

------------------------------------------------

                                               1

 

SQL> SELECT existsNode(value(X),

  2         '/sqlstress/config[userPWD="'||chr(10)||'            shanxi806'||chr(10)||'        "'||']')

  3     FROM XMLTABLE X;

EXISTSNODE(VALUE(X),'/SQLSTRESS/CONFIG[USERPWD="'||CHR(10)||'SHANXI806'||CHR(10)

--------------------------------------------------------------------------------

                                                                               1

 

SQL> SELECT count(*)

  2    FROM XMLContent x

  3   WHERE existsNode(xmlvalue,'/sqlstress/config[userName="shanxi806"]') = 1;

  COUNT(*)

----------

         1

 

SQL> SELECT count(*)

  2    FROM XMLContent x

  3   WHERE existsNode(xmlvalue,'/sqlstress/functions/function[@id=1]') = 1;

  COUNT(*)

----------

         1

 

SQL> SELECT count(*)

  2    FROM XMLContent x

  3   WHERE existsNode(xmlvalue,'/sqlstress/functions/function/parameters/parameter[2][@pid=2]') = 1;

  COUNT(*)

----------

         1

 

2.3.2extractValue()

EXTRACTVALUE()是从某个节点中读取值

 

SQL> select extractValue(xmlvalue, '/sqlstress/config/userPWD')

  2  from xmlcontent

  3  where keyvalue='1';

 

EXTRACTVALUE(XMLVALUE,'/SQLSTRESS/CONFIG/USERPWD')

----------------------------------------------------------------

            shanxi806

 

SQL> SELECT extractvalue(xmlvalue, '/sqlstress/functions/function[1]/parameters/parameter[2]/@pid')

  2    FROM xmlcontent

  3   WHERE keyvalue = '1';

EXTRACTVALUE(XMLVALUE,'/SQLSTRESS/FUNCTIONS/FUNCTION[1]/PARAMETERS/PARAMETER[2]/

--------------------------------------------------------------------------------

2

 

ExtractValue只能返回一个确切的位置节点的值,如果存在多个相同节点,Oracle就会报错:

SQL> SELECT extractvalue(xmlvalue, '/sqlstress/functions/function[1]/parameters/

parameter')

  2    FROM xmlcontent

  3   WHERE keyvalue = '1';

  FROM xmlcontent

       *

ERROR at line 2:

ORA-19025: EXTRACTVALUE returns value of only one node

 

SQL> SELECT extractvalue(xmlvalue, '/sqlstress/config')

  2    FROM xmlcontent

  3   WHERE keyvalue = '1';

  FROM xmlcontent

       *

ERROR at line 2:

ORA-19025: EXTRACTVALUE returns value of only one node

 

2.3.3Extract()

EXTRACT函数返回一个XML文档的一个节点树,或者某一节点下所有符合条件的节点。

返回一个节点树:

SQL> set line 100

SQL> set lone 20000

SQL> SELECT extract(xmlvalue, '/sqlstress/config')

  2    FROM xmlcontent

  3   WHERE keyvalue = '1';

 

EXTRACT(XMLVALUE,'/SQLSTRESS/CONFIG')

-----------------------------------------------------

<config>

  <connURL>

            jdbc:oracle:thin:@10.71.111.231:1521:P51

        </connURL>

  <userName>shanxi806</userName>

  <userPWD>

            shanxi806

        </userPWD>

  <threadNum>

            100

        </threadNum>

  <execNumPerThread>

            1000

        </execNumPerThread>

</config>

 

返回所有符合条件的节点:

SQL> SELECT extract(xmlvalue, '/sqlstress/functions/function[1]/parameters/parameter/paraType')

  2    FROM xmlcontent

  3   WHERE keyvalue = '1';

 

EXTRACT(XMLVALUE,'/SQLSTRESS/FUNCTIONS/FUNCTION[1]/PARAMETERS/PARAMETER/PARATYPE')

--------------------------------------------------------------------------------

<paraType>

                        String

                    </paraType>

<paraType>

                        String

                    </paraType>

<paraType>

                        int

                    </paraType>

<paraType>

                        String

                    </paraType>

<paraType>

                        String

                    </paraType>

<paraType>

                        float

font-

分享到:
评论

相关推荐

    Oracle XML DB Developer's Guide

    Oracle XML DB Developer's Guide 是一份由Oracle公司官方发布的指南,它为开发者提供了在Oracle数据库中加载、存储、生成、操作、管理、访问和查询XML数据的指导和示例。这份文档是Oracle XML DB 10g Release 2版本...

    Oracle XML DB应用开发Oracle Database 11g

    Oracle XML DB是Oracle Database 11g中一个重要的特性,它是Oracle公司提供的一个全面的、高性能的XML存储和处理解决方案。这个特性使得Oracle数据库能够直接处理XML数据,无需将其转换为关系模型,从而极大地提高了...

    Oracle 12c Release 2 (12.2) XML DB Developers Guide.pdf

    Oracle XML DB是Oracle数据库的一个可选特性,它允许将XML数据以原生方式存储和管理。Oracle 12c Release 2是甲骨文公司数据库产品的一个版本,而Oracle 12c Release 2 (12.2) XML DB Developer's Guide是该版本中...

    Oracle XML DB 11g中 XML 数据管理

    ### Oracle XML DB 11g 中 XML 数据管理 #### 概述 随着XML成为数据传输的新标准,越来越多的企业采用基于XML的解决方案。然而,复杂的XML格式(如包含多个命名空间、数千个元素和递归定义)给数据管理带来了挑战...

    在Oracle XML DB中存储XML

    ### 在Oracle XML DB中存储XML的关键知识点 #### 1. Oracle XML DB简介 - **Oracle XML DB** 是Oracle Database的一部分,旨在提供一个高效且灵活的方式来管理和查询XML文档。 - Oracle XML DB不仅支持XML文档的...

    Oracle XML DB

    #### 四、Oracle 9i R2 中的 XMLDB 特性 - **增强的 XMLType**: - 支持 XML Schema,提供更精细的数据类型控制。 - 维护 DOM 忠诚度的对象关系存储方式。 - 专门针对 XML 的内存管理机制,提高可扩展性和性能。...

    Oracle XML DB英文资料

    Oracle XML DB是Oracle数据库系统内置的一系列XML特性和技术,主要目标是解决XML文档与关系型数据库之间的数据交互问题。在Oracle9i Database Release 2中引入的XML DB Repository(XML数据库仓库)是一项核心功能,...

    Oracle XML DB文章

    Oracle XML DB 是 Oracle 数据库系统中的一个特性,它在 Oracle 9.2 版本中首次引入,专门用于处理和存储 XML(可扩展标记语言)数据。XML 是一种标准的数据交换格式,常用于在不同系统间传递结构化信息。Oracle XML...

    Oracle XML DB应用开发.rar

    6. **XMLDB API**:Oracle提供了一系列的PL/SQL包,如DBMS_XDB、DBMS_XSL_PROCESSOR等,用于在PL/SQL中操作XML数据,包括读写XML文档、执行XQuery、处理XML Schema等。 7. **Web服务集成**:Oracle XML DB可以作为...

    基于Oracle XML DB的XML文档存储技术的研究.pdf

    综上所述,Oracle XML DB是Oracle数据库对XML技术的一种高效整合,它扩展了传统关系型数据库的功能,适应了现代数据管理的需求,尤其在处理XML文档时表现出强大的性能和灵活性。对于开发者和IT专业人士来说,掌握...

    基于Oracle XML DB技术的XML数据存储研究.pdf

    【Oracle XML DB技术详解】 Oracle XML DB是一种集成在Oracle数据库中的技术,专门用于处理和存储XML数据。XML(可扩展标记语言)作为一种通用的数据交换格式,由于其灵活性和结构化特性,广泛应用于不同系统间的...

    Oracle XML DB和DB2 pure XML在XML文档存储查询性能方面的比较分析.pdf

    《Oracle XML DB与DB2 pure XML在XML文档存储查询性能比较分析》 随着信息技术的快速发展,尤其是医疗领域信息化进程的推进,电子病历已经成为医院信息化的核心组成部分。电子病历不仅包含文字、数字信息,还可能...

    基于Oracle XML DB的XML存取技术研究.pdf

    Oracle XML DB是Oracle数据库系统内建的一个功能强大的XML处理组件,专为高效地存储、检索和处理XML数据而设计。它充分利用了Oracle数据库的核心优势,实现了XML数据与关系型数据库的无缝集成。XML(可扩展标记语言...

    Oracle XML DB的发展历程.pdf

    同时,11g还增强了XMLDB的互操作性,支持多种XML标准,如SOAP、WSDL和WS-Security,使其成为Web服务的重要组成部分。 在Oracle 12c及以后的版本中,Oracle XML DB继续发展,增加了对XML数据的并行处理能力,提升了...

    Oracle XML DB和DB2 pure XML在基于XML电子病历实现技术方面的比较分析.pdf

    【Oracle XML DB与DB2 pure XML在XML电子病历实现技术的比较分析】 XML(eXtensible Markup Language)在医疗行业中被广泛用于构建电子病历系统,因为其能够有效地表示复杂的医疗数据结构。然而,如何在关系型...

    基于Oracle XML DB的EDI系统设计.pdf

    【Oracle XML DB】是Oracle数据库的一个重要特性,它专门用于管理和处理XML数据。Oracle XML DB提供了全面的XML存储、查询和处理能力,使得XML数据能够无缝集成到Oracle数据库环境中。Oracle XML DB支持标准的XML...

    基于 Oracle XML DB 的可结构化的电子病历的研究

    ### 基于Oracle XML DB的可结构化电子病历研究 #### 一、引言与背景 随着信息技术的进步及医疗服务需求的增长,电子病历(Electronic Medical Record, EMR)已成为提升医疗服务质量的关键因素之一。电子病历不仅有...

Global site tag (gtag.js) - Google Analytics