Oracle XML DB 的使用

 

 

XML DB简介

 

Oracle XML DB 是一组专门为 XML 开发的内置高性能存储和检索技术。OracleXML DB 将 World Wide Web Consortium (W3C) XML 数据模型完全吸收到 Oracle9i 数据库中,并为导航和查询 XML 提供了新的标准访问方法。可以同时获得关系数据库技术和 XML 技术的所有优势。Oracle XML DB 可用于存储、查询、更新、转换或处理 XML,并使用 SQL 查询访问相同的 XML 数据。

 

 

文章主要内容

 

本文主要描述了在什么地方和怎样使用Oracle XML DB。文章除了讨论了Oracle XML DB的一般使用场景下XMLType数据的存取(Storage and Acess),以及相关数据的更新(Update)和验证(Validation)而外还解释了为什么学习使用Oracle XML DB对Xpath和XML Schema的学习是有帮助作用的。文中还包括了相关的实例。通过阅读本文可以了解到如何在不同的客户端程序中使用标准的协议来对存储了XML Type数据类型的数据库进行操作。

 

包括的小节:

 

n          向XMLType或者XMLType column数据表中存放数据。

 

n          从XMLType或者XMLType column数据表中取数据。

 

n          在Oracle XML DB中使用Xpath。

 

n          使用updateXML()方法更新XML文档。

 

 

向XMLType或者XMLType column数据表中存放数据

 

  当需要要向Oracle9i数据库中存储XML文档时,可以采取如下的这些方法,包括:

 

n          在Oracle9i数据库外部将XML文档进行解析,将分析所得到的结果以行的形式存入一个或者多个表中。在这种场景下,数据库不知道正在处理的是XML格式的内容。

 

n          将XML文档存储在Oracle9i数据库的CLOB或者VARCHAR2字段。这种场景下数据库仍然无法知道正在处理XML文档。但是用户可以使用XDK编写程序来执行XML操作。

 

n          把XML文档作为XMLType数据类型存储在Oracle9i数据库中。

    使用以下两种方式都是有效的:

 

n          将XML文档存储在XMLType数据列中。

 

n          将XML文档存储在XMLType数据表中。

  采用以上两种方式存储就意味着数据库能够知道正在处理的数据是XML文档,使用这种方法来存放XML文档将给我们带来很大的方便,因为Oracle9i数据库中提供了一系列的新特性,这使得对XML数据进行高效的处理变成了可能。

 

Example 3-1 创建一个带 XMLType 数据列的表

翻译的一个oracle技术文档小片段CREATE TABLE Example1
翻译的一个oracle技术文档小片段(
翻译的一个oracle技术文档小片段    KEYVALUE  varchar2(
10)  primary key,
翻译的一个oracle技术文档小片段    XMLCOLUMN xmltype
翻译的一个oracle技术文档小片段);   
Example 3-2
创建一个XMLType表

翻译的一个oracle技术文档小片段CREATE TABLE XMLTABLE OF XMLType;
Example 3-3
将XML文档转化XMLType实例,然后存储到XMLType表或者带XMLType数据列的表中

为了将 XML文档存到XMLType数据表或者带XMLType数据列的表中首先必须将XML文档转化为XMlType实例。这个动作可以使用XMLType数据类型所提供的各种各样的构造函数来完成,例如使用一个PL/SQL函数getClobDocument():

翻译的一个oracle技术文档小片段create or replace function getClobDocument(
翻译的一个oracle技术文档小片段filename 
in varchar2,
翻译的一个oracle技术文档小片段 charset 
in varchar2 default NULL)
翻译的一个oracle技术文档小片段 
return CLOB deterministic
翻译的一个oracle技术文档小片段 
is
翻译的一个oracle技术文档小片段    
file            bfile := bfilename('c:/',filename);
翻译的一个oracle技术文档小片段    charContent     CLOB :
= ' ';
翻译的一个oracle技术文档小片段    targetFile      bfile;
翻译的一个oracle技术文档小片段    lang_ctx        
number := DBMS_LOB.default_lang_ctx;
翻译的一个oracle技术文档小片段    charset_id      
number := 0;
翻译的一个oracle技术文档小片段    src_offset      
number := 1 ;
翻译的一个oracle技术文档小片段    dst_offset      
number := 1 ;
翻译的一个oracle技术文档小片段    warning         
number;
翻译的一个oracle技术文档小片段 
begin
翻译的一个oracle技术文档小片段   
if charset is not null then
翻译的一个oracle技术文档小片段       charset_id :
= NLS_CHARSET_ID(charset);
翻译的一个oracle技术文档小片段   
end if;
翻译的一个oracle技术文档小片段   targetFile :
= file;
翻译的一个oracle技术文档小片段   DBMS_LOB.fileopen(targetFile, DBMS_LOB.file_readonly);
翻译的一个oracle技术文档小片段   DBMS_LOB.LOADCLOBFROMFILE(charContent, targetFile,
翻译的一个oracle技术文档小片段           DBMS_LOB.getLength(targetFile), src_offset, dst_offset,
翻译的一个oracle技术文档小片段           charset_id, lang_ctx,warning);
翻译的一个oracle技术文档小片段   DBMS_LOB.fileclose(targetFile);
翻译的一个oracle技术文档小片段   
return charContent;
翻译的一个oracle技术文档小片段 
end;
翻译的一个oracle技术文档小片段 
/
翻译的一个oracle技术文档小片段
-- create XMLDIR directory
翻译的一个oracle技术文档小片段--
 connect system/manager
翻译的一个oracle技术文档小片段--
 create directory XMLDIR as '<location_of_xmlfiles_on_server>';
翻译的一个oracle技术文档小片段--
 grant read on directory xmldir to public with grant option;
翻译的一个oracle技术文档小片段
 
翻译的一个oracle技术文档小片段
-- you can use getCLOBDocument() to generate a CLOB from a file containing
翻译的一个oracle技术文档小片段--
 an XML document. For example, the following statement inserts a row into the 
翻译的一个oracle技术文档小片段--
 XMLType table Example2 created earlier:
使用方法:

翻译的一个oracle技术文档小片段INSERT INTO XMLTABLE 
翻译的一个oracle技术文档小片段
VALUES(XMLTYPE(getCLOBDocument('purchaseorder.xml')));

注意Charset参数的使用,它用来确定指定文件的字符集,如果该参数被忽略,将默认采用当前数据库所采用的字符集,例如在文档invoice.xml中使用的韩文字符集KO16KSC5601,它可以被装载到XMLType数据表XMLDOC数据表中:

翻译的一个oracle技术文档小片段insert into xmldoc
翻译的一个oracle技术文档小片段   
values(xmltype(getClobDocument('invoice.xml','KO16KSC5601')));

下面的例子将使用UTF8文件格式

翻译的一个oracle技术文档小片段insert into xmldoc
翻译的一个oracle技术文档小片段   
values(xmltype(getClobDocument('invoice.xml','UTF8')));

如果不使用Charset参数将默认使用ZHS16GBK.

翻译的一个oracle技术文档小片段insert into xmldoc values(xmltype(getClobDocument('invoice.xml')));
获取XMLType表或者带有XMLType数据列的表中的数据

一旦一组XML文档存储为许多XMLType表或者许多XMLType数据列之后,下一步要做的就是对存储的数据进行恢复操作。当需要对一组XML文档进行操作时,通常需两个基本工作要做:

决定怎样从一组XML文档中找到需要的子集。

决定怎样更优地从一组XML文档所包含的节点集(nodes)中找到需要的子集。

由于在Oracle9i数据库和XMLType数据类型提供了许多相关的函数使得上述的这些操作变得非常简单。这些函数使用W3C的XPath推荐标准来对一组XML文档中的数据进行导航。

在Oracle XML DB中使用Xpath

XML DB中提供的许多函数都是基于W3C Xpath推荐标准的。Xpath规范规定通过使用“/”符号来访问XML文档中的的元素和属性,例如/A/B,/A@name(name表示属性名)。在XML DB中使用XPath表达式和我们比较熟悉的SQl语句能很好地完成对XML文档的相关操作。

Xpath在Oracle XML DB中的主要作用是结合extract(),extractValue(),和existsNode()等函数来完成一些数据操作。

函数existsNode()的作用是判断在给定的XML文档中是否存在一个与Xpath表达式吻合的节点。如果文档中存在这么一个节点,函数将返回值1。

PurchaseOrder XML文档

本节中的例子都是基于一下的PurchaseOrder XMl文档。

翻译的一个oracle技术文档小片段<PurchaseOrder 
翻译的一个oracle技术文档小片段 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
翻译的一个oracle技术文档小片段 xsi:noNamespaceSchemaLocation
="http://www.oracle.com/xdb/po.xsd">
翻译的一个oracle技术文档小片段  
<Reference>ADAMS-20011127121040988PST</Reference>
翻译的一个oracle技术文档小片段  
<Actions>
翻译的一个oracle技术文档小片段    
<Action>
翻译的一个oracle技术文档小片段      
<User>SCOTT</User>
翻译的一个oracle技术文档小片段      
<Date>2002-03-31</Date>
翻译的一个oracle技术文档小片段    
</Action>
翻译的一个oracle技术文档小片段  
</Actions>
翻译的一个oracle技术文档小片段  
<Reject/>
翻译的一个oracle技术文档小片段  
<Requestor>Julie P. Adams</Requestor>
翻译的一个oracle技术文档小片段  
<User>ADAMS</User>
翻译的一个oracle技术文档小片段  
<CostCenter>R20</CostCenter>
翻译的一个oracle技术文档小片段  
<ShippingInstructions>
翻译的一个oracle技术文档小片段    
<name>Julie P. Adams</name>
翻译的一个oracle技术文档小片段    
<address>Redwood Shores, CA 94065</address>
翻译的一个oracle技术文档小片段    
<telephone>650 506 7300</telephone>
翻译的一个oracle技术文档小片段  
</ShippingInstructions>
翻译的一个oracle技术文档小片段  
<SpecialInstructions>Ground</SpecialInstructions>
翻译的一个oracle技术文档小片段  
<LineItems>
翻译的一个oracle技术文档小片段    
<LineItem ItemNumber="1">
翻译的一个oracle技术文档小片段      
<Description>The Ruling Class</Description>
翻译的一个oracle技术文档小片段      
<Part Id="715515012423" UnitPrice="39.95" Quantity="2"/>
翻译的一个oracle技术文档小片段    
</LineItem>
翻译的一个oracle技术文档小片段    
<LineItem ItemNumber="2">
翻译的一个oracle技术文档小片段      
<Description>Diabolique</Description>
翻译的一个oracle技术文档小片段      
<Part Id="037429135020" UnitPrice="29.95" Quantity="3"/>
翻译的一个oracle技术文档小片段    
</LineItem>
翻译的一个oracle技术文档小片段    
<LineItem ItemNumber="3">
翻译的一个oracle技术文档小片段      
<Description>8 1/2</Description>
翻译的一个oracle技术文档小片段      
<Part Id="037429135624" UnitPrice="39.95" Quantity="4"/>
翻译的一个oracle技术文档小片段    
</LineItem>
翻译的一个oracle技术文档小片段  
</LineItems>
翻译的一个oracle技术文档小片段
</PurchaseOrder>
使用existNode()函数

该函数的语法示意图3-1:

exitstNode()语法示意图:

翻译的一个oracle技术文档小片段

Example 3-4 existsNode() 示例:寻找一个与XPath表达式匹配的节点

以PurchaseOrder XML为例, 在下面的程序中使用existsNode将返回值“1”:

翻译的一个oracle技术文档小片段SELECT existsNode(value(X),'/PurchaseOrder/Reference')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
SELECT existsNode(value(X),
翻译的一个oracle技术文档小片段       
'/PurchaseOrder[Reference="ADAMS-20011127121040988PST"]')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
SELECT existsNode(value(X),
翻译的一个oracle技术文档小片段       
'/PurchaseOrder/LineItems/LineItem[2]/Part[@Id="037429135020"]')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
SELECT existsNode(value(X),
翻译的一个oracle技术文档小片段       
'/PurchaseOrder/LineItems/LineItem[Description="8 1/2"]')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;   

Example 3-5 existsNode() 示例:不存在与Xpath表达式匹配的节点

由于不存在与Xpath表达式相匹配的节点,existsNode将返回值0:

翻译的一个oracle技术文档小片段SELECT existsNode(value(X),'/PurchaseOrder/UserName')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
SELECT existsNode(value(X),
翻译的一个oracle技术文档小片段       
'/PurchaseOrder[Reference="ADAMS-XXXXXXXXXXXXXXXXXXXX"]')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
SELECT existsNode(value(X),
翻译的一个oracle技术文档小片段       
'/PurchaseOrder/LineItems/LineItem[3]/Part[@Id="037429135020"]')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
SELECT existsNode(value(X),
翻译的一个oracle技术文档小片段       
'/PurchaseOrder/LineItems/LineItem[Description="Snow White"]')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
existsNode()函数的最普遍的用法是将其放在SELECT,UPDATE,DELETE等SQL语句的where子句中。这种情况下,Xpath
表达式被传递给existsNode() 函数,where语句通过existsNode()函数的返回值来决定数据表中的哪一个XML文档将被
SQl语句处理。

Example 3-6 在where子句中使用existsNode()函数。

翻译的一个oracle技术文档小片段SELECT count(*)
翻译的一个oracle技术文档小片段   
FROM XMLTABLE x
翻译的一个oracle技术文档小片段   
WHERE existsNode(value(x),'/PurchaseOrder[User="ADAMS"]') = 1;  
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段
DELETE FROM XMLTABLE x
翻译的一个oracle技术文档小片段   
WHERE existsNode(value(x),'/PurchaseOrder[User="ADAMS"]') = 1;  
翻译的一个oracle技术文档小片段
commit;
extractNode()函数也是以Xpath表达式为参数,将返回以XMLtype数据类型存放在数据库中的XML文档中的text节点或者节点
属性值。这个返回值将以一般对象数据类型的形式返回。

该函数的语法示意图:

翻译的一个oracle技术文档小片段

extractValue()函数的使用示例:

Example 3-7 extractValue()的有效使用示例

翻译的一个oracle技术文档小片段SELECT extractValue(value(x),'/PurchaseOrder/Reference')
翻译的一个oracle技术文档小片段  
FROM XMLTABLE X;
返回:

EXTRACTVALUE(VALUE(X),'/PURCHASEORDER/REFERENCE')

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

ADAMS-20011127121040988PST

翻译的一个oracle技术文档小片段SELECT extractValue(value(x),
翻译的一个oracle技术文档小片段      
'/PurchaseOrder/LineItems/LineItem[2]/Part/@Id')
翻译的一个oracle技术文档小片段  
FROM XMLTABLE X;
返回:

EXTRACTVALUE(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[2]/PART/@ID')

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

037429135020

extractValue()函数只能返回某一个text节点的的值或者某一个节点的属性值. 以下是两个extractValue()函数的无效使用示例。在第一个示例中Xpath表达式

可以匹配三个XML文档中的节点,在第二个例子中Xpath表达式指向的是一个树形节点而非某个text节点的值或者某一个节点的属性值。应此可以看到,这两种用法

都是无效的使用方法。

Example 3-8 extractValue()无效使用示例

翻译的一个oracle技术文档小片段SELECT extractValue(value(X),
翻译的一个oracle技术文档小片段                   
'/PurchaseOrder/LineItems/LineItem/Description')
翻译的一个oracle技术文档小片段   
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
翻译的一个oracle技术文档小片段
-- FROM XMLTABLE X;
翻译的一个oracle技术文档小片段--
       *
翻译的一个oracle技术文档小片段--
 ERROR at line 3:
翻译的一个oracle技术文档小片段--
 ORA-19025: EXTRACTVALUE returns value of only one node
翻译的一个oracle技术文档小片段

翻译的一个oracle技术文档小片段
SELECT extractValue(value(X),
翻译的一个oracle技术文档小片段                   
'/PurchaseOrder/LineItems/LineItem[1]')
翻译的一个oracle技术文档小片段  
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段
-- FROM XMLTABLE X
翻译的一个oracle技术文档小片段--
    *
翻译的一个oracle技术文档小片段--
 ERROR at line 3:
翻译的一个oracle技术文档小片段--
 ORA-19025: EXTRACTVALUE returns value of only one node   

Example 3-9将extractValue() 使用在where子句中

extractValue() 也可以被放置在 SELECT, UPDATE, 或者 DELETE 等SQL语句的where子句中. 这使得我们可以实现XMLType表之间的联接、

带有XMLType数据列的表之间的联接、和其他的关系型数据表与XMLType之间的联接。以下的查询展示了怎样在SELECT清单中和where子句中使用extractValue()方法。

翻译的一个oracle技术文档小片段SELECT extractValue(value(x),'/PurchaseOrder/Reference')
翻译的一个oracle技术文档小片段    
FROM XMLTABLE X, SCOTT.EMP
翻译的一个oracle技术文档小片段    
WHERE extractValue(value(x),'/PurchaseOrder/User') = EMP.ENAME
翻译的一个oracle技术文档小片段    
AND EMP.EMPNO = 7876;
--
返回:

-- EXTRACTVALUE(VALUE(X),'/PURCHASEORDER/REFERENCE')

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

-- ADAMS-20011127121040988PST  

使用extract()函数

语法示意图3-3:

翻译的一个oracle技术文档小片段

extract()函数用来获取Xpath指向的一组节点。这些节点将以XMLType实例的形式返回。extract() 函数的返回值既可以是一个XML文档也可以是XML文档片断。

Example 3-10 使用 extract() 返回XML文档片断

下面的程序使用extract()函数返回XMLType实例。 该实例是一个包含了Xpath所指向的一组Description节点.

翻译的一个oracle技术文档小片段set long 20000
翻译的一个oracle技术文档小片段
SELECT extract(value(X),
翻译的一个oracle技术文档小片段              
'/PurchaseOrder/LineItems/LineItem/Description')
翻译的一个oracle技术文档小片段  
FROM XMLTABLE X;
翻译的一个oracle技术文档小片段 
-- 返回:

-- EXTRACT(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM/DESCRIPTION')

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

-- <Description>The Ruling Class</Description>

-- <Description>Diabolique</Description>

-- <Description>8 1/2</Description>

Example 3-11用 extract() 函数返回 一棵 XPath 表达式指向的节点树

翻译的一个oracle技术文档小片段SELECT extract(value(X),
翻译的一个oracle技术文档小片段             
'/PurchaseOrder/LineItems/LineItem[1]')
翻译的一个oracle技术文档小片段  
FROM XMLTABLE X;
返回:

EXTRACT(VALUE(X),'/PURCHASEORDER/LINEITEMS/LINEITEM[1]')

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

翻译的一个oracle技术文档小片段<LineItem ItemNumber="1">
翻译的一个oracle技术文档小片段  
<Description>The Ruling Class</Description>
翻译的一个oracle技术文档小片段  
<Part Id="715515012423" UnitPrice="39.95" Quantity="2"/>
翻译的一个oracle技术文档小片段
</LineItem>               
使用XMLSequence()函数

XMLSequence语法示意图:

翻译的一个oracle技术文档小片段

XMLSequence()函数可以将XML文档片断转化为一系列的XMLType实例。XMLSequence()函数可以通过获取一个包含XML文档片段的XMLType实例来返回

组 XMLType对象。 这一组对象的中的每一个对象对应一个XML文档片断中的一个根级的节点。 最后,使用SQL TABLE()函数就可以将这一组对象转化为数据

行集合。

Example 3-12 使用XMLSequence() 和 TABLE()函数从XML文档中提取Description 的节点值

翻译的一个oracle技术文档小片段set long 10000
翻译的一个oracle技术文档小片段
set feedback on
翻译的一个oracle技术文档小片段
SELECT extractValue(value(t),'/Description')
翻译的一个oracle技术文档小片段  
FROM XMLTABLE X, 
翻译的一个oracle技术文档小片段    
TABLE ( xmlsequence (
翻译的一个oracle技术文档小片段           extract(value(X),
翻译的一个oracle技术文档小片段                 
'/PurchaseOrder/LineItems/LineItem/Description')
翻译的一个oracle技术文档小片段           )
翻译的一个oracle技术文档小片段  ) t;
 

返回:

EXTRACTVALUE(VALUE(T),'/DESCRIPTION')

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

The Ruling Class

Diabolique

8 1/2
使用updateXML()方法来更新XML文档

语法示意图3-5:

翻译的一个oracle技术文档小片段

updateXML() 函数可以用来对XML文档中的节点的属性值,节点,text节点值,树形节点进行更新。更新的对象的位置由Xpath表达式来指定。

以下的程序展示了如何对以XMLType形式存放在数据表中的XML文档进行更新操作。

Example 3-13使用 updateXML()方法来对XPath表达式所指定的Text节点 的值进行更新

XPath表达式为`/PurchaseOrder/Reference':

 

翻译的一个oracle技术文档小片段UPDATE XMLTABLE t
翻译的一个oracle技术文档小片段    
SET value(t) = updateXML(value(t),
翻译的一个oracle技术文档小片段                           
'/PurchaseOrder/Reference/text()',
翻译的一个oracle技术文档小片段                           
'MILLER-200203311200000000PST')
翻译的一个oracle技术文档小片段    
WHERE existsNode(value(t),
翻译的一个oracle技术文档小片段       
'/PurchaseOrder[Reference="ADAMS-20011127121040988PST"]') = 1;

返回:

1 row updated.

翻译的一个oracle技术文档小片段SELECT value(t)
翻译的一个oracle技术文档小片段   
FROM XMLTABLE t;

 

This returns:

VALUE(T)

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

翻译的一个oracle技术文档小片段<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:noNamespaceSchemaLocation="http://www.oracle.com/xdb/po.xsd">
翻译的一个oracle技术文档小片段  
<Reference>MILLER-200203311200000000PST</Reference>
翻译的一个oracle技术文档小片段翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段
</PurchaseOrder> 

 

Example 3-14 使用 updateXML() 函数来替代Xath表达式所指定的树形节点

XPath 表达式: `/PurchaseOrders/LineItems/LineItem[2]'.

 

翻译的一个oracle技术文档小片段UPDATE XMLTABLE t
翻译的一个oracle技术文档小片段  
SET value(t) = 
翻译的一个oracle技术文档小片段  updateXML(value(t),
翻译的一个oracle技术文档小片段            
'/PurchaseOrder/LineItems/LineItem[2]',
翻译的一个oracle技术文档小片段            xmltype(
'<LineItem ItemNumber="4">
翻译的一个oracle技术文档小片段                       <Description>Andrei Rublev</Description>
翻译的一个oracle技术文档小片段                       <Part Id="715515009928" UnitPrice="39.95"
翻译的一个oracle技术文档小片段                             Quantity="2"/>
翻译的一个oracle技术文档小片段                     </LineItem>
'
翻译的一个oracle技术文档小片段           )
翻译的一个oracle技术文档小片段)
翻译的一个oracle技术文档小片段  
WHERE existsNode(value(t),
翻译的一个oracle技术文档小片段        
'/PurchaseOrder[Reference="MILLER-200203311200000000PST"]'
翻译的一个oracle技术文档小片段  ) 
= 1;

返回:

1 row updated.

 

翻译的一个oracle技术文档小片段SELECT value(t)
翻译的一个oracle技术文档小片段  
FROM XMLTABLE t;

返回:

VALUE(T)

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

翻译的一个oracle技术文档小片段<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNames
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段paceSchemaLocation
="http://www.oracle.com/xdb/po.xsd">

翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段  
<Reference>MILLER-200203311200000000PST</Reference>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段  
<LineItems>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段    
<LineItem ItemNumber="1">
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段      
<Description>The Ruling Class</Description>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段      
<Part Id="715515012423" UnitPrice="39.95" Quantity="2"/>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段    
</LineItem>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段    
<LineItem ItemNumber="4">
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段      
<Description>Andrei Rublev</Description>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段      
<Part Id="715515009928" UnitPrice="39.95" Quantity="2"/>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段    
</LineItem>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段    
<LineItem ItemNumber="3">
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段      
<Description>8 1/2</Description>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段      
<Part Id="037429135624" UnitPrice="39.95" Quantity="4"/>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段    
</LineItem>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段  
</LineItems>
翻译的一个oracle技术文档小片段
翻译的一个oracle技术文档小片段
</PurchaseOrder>  


(原文:Oracle9i XML Database Developer’s Guide - Oracle XML DB release 2)

相关文章:

  • 2021-04-17
  • 2021-06-18
  • 2021-10-04
  • 2021-12-14
  • 2021-11-23
  • 2021-08-20
  • 2022-01-21
  • 2022-12-23
猜你喜欢
  • 2021-09-06
  • 2022-12-23
  • 2021-06-28
  • 2022-12-23
  • 2022-01-27
  • 2022-12-23
  • 2021-06-26
相关资源
相似解决方案