Oracle XML到SQL查询数据

Oracle XML到SQL查询数据,xml,oracle,Xml,Oracle,我是oracle的新手,最近开始使用XML DB,我阅读了XMLType存储模型,我认为结构化存储是项目的最佳选择,我们的XML数据是高度结构化的,具有可预测的结构 我在oracle中注册了一个架构(我使用XE进行测试),并执行了以下语句: begin DBMS_XMLSCHEMA.REGISTERSCHEMA(SCHEMAURL=>'PRODUCTOS.xsd', SCHEMADOC=>'<?xml version="1.0" encoding="UTF-8"?>

我是oracle的新手,最近开始使用XML DB,我阅读了XMLType存储模型,我认为结构化存储是项目的最佳选择,我们的XML数据是高度结构化的,具有可预测的结构

我在oracle中注册了一个架构(我使用XE进行测试),并执行了以下语句:

begin

DBMS_XMLSCHEMA.REGISTERSCHEMA(SCHEMAURL=>'PRODUCTOS.xsd', SCHEMADOC=>'<?xml version="1.0" encoding="UTF-8"?>

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="LISTA_PRODUCTOS">
          <xs:complexType>
                 <xs:sequence>
                        <xs:element name="PRODUCTO" maxOccurs="unbounded" minOccurs="1">
                               <xs:complexType>
                                      <xs:sequence>
                                             <xs:element type="xs:string" name="articulo"></xs:element>
                                             <xs:element type="xs:string" name="CE"></xs:element>
                                             <xs:element type="xs:string" name="cantidad"></xs:element>
                                             <xs:element type="xs:string" name="centro"></xs:element>
                                             <xs:element type="xs:string" name="cliente"></xs:element>
                                             <xs:element type="xs:string" name="concepto"></xs:element>
                                             <xs:element type="xs:string" name="descripcionProducto"></xs:element>
                                             <xs:element type="xs:string" name="espacioM2"></xs:element>
                                             <xs:element type="xs:string" name="importe"></xs:element>
                                             <xs:element type="xs:string" name="marca"></xs:element>
                                             <xs:element type="xs:string" name="medida"></xs:element>
                                             <xs:element type="xs:string" name="modelo"></xs:element>
                                             <xs:element type="xs:string" name="paquete"></xs:element>
                                             <xs:element type="xs:string" name="pesoUnitario"></xs:element>
                                             <xs:element type="xs:string" name="precio"></xs:element>
                                             <xs:element type="xs:string" name="referencia"></xs:element>
                                             <xs:element type="xs:string" name="remolque"></xs:element>
                                             <xs:element type="xs:string" name="serie"></xs:element>
                                             <xs:element type="xs:string" name="UM"></xs:element>
                                             <xs:element type="xs:string" name="valorUnitario"></xs:element>
                                         </xs:sequence>
                                  </xs:complexType>
                           </xs:element>
                    </xs:sequence>
             </xs:complexType>
      </xs:element>
</xs:schema>', LOCAL=>true, GENTYPES=>true, GENBEAN=>false, GENTABLES=>true,
FORCE=>false,  OWNER=>'TEST');

commit;

end;
如果我在
LISTA\u PRODUCTOS448\u T
上执行一个select(
select T.getClobVal()
from
LISTA\u PRODUCTOS448\u T
),我可以看到所有的xml数据,但我很困惑,我不知道是否可以执行传统的SQL查询并将数据作为简单的记录集获取,或者是否有必要使用XMLtype函数和使用XPath语法的过程或其他什么。它为什么要创建所有这些对象

另外,我不知道如何设置
LISTA_PRODUCTOS451_选项卡
表的内存大小;如果我尝试在一行中插入20个xml节点,它会将所有20个节点保存在一行中,如果我尝试保存1000个,则select将返回
ORA-06502:数值或值错误:字符串缓冲区太小


提前谢谢,我的英语很抱歉。

它创建对象是因为您有
gentypes=>true
(和
gentables=>true
)。您知道数据存储为XML文档,因此需要使用XPath等以不同的格式获取数据。不知道你说的尺寸是什么意思;如何将“一行20个xml节点”作为一个长字符串插入?这是一个
varchar2
大小限制,与表格无关。您必须单独插入每个节点,并且可能仍然需要使用CLOB操作。请提供一些细节。您真的确定XML是处理这些数据的方法吗?谢谢您的反馈!谢谢你的反馈!问题是,我创建了一个存储过程来接收参数中的xml数据(XMLtype中的param),因此我认为可以像另一个简单的insert语句[insert into table_name values(param)]那样插入数据,因为存储过程是oracle web服务,SAP应用程序正在使用此sp,对于每个请求,SAP将发送10000-20000条记录(或xml节点)。好的,因此您需要决定(或者您已经有了)是否最好将其存储为xml并在以后提取所需内容,或者提取所有内容并存储在普通表中;基于你需要做什么和如何使用它。这在很大程度上取决于您在收到它之后是否需要在任何时候将其视为XML。谢谢你,亚历克斯。
LISTA_PRODUCTOS451_TAB (XMLtype STORAGE OBJECT-RELATIONAL TYPE LISTA_PRODUCTOS448_T)
desc LISTA_PRODUCTOS448_T -> PRODUCTO (type PRODUCTO450_COLL)

desc PRODUCTO450_COLL -> articulo VARCHAR2(4000 CHAR), CE VARCHAR2(4000 CHAR), cantidad VARCHAR2(4000 CHAR) ... valorUnitario VARCHAR2(4000 CHAR).