从列中提取值(xmltype)

问题描述 投票:1回答:1

我们正在使用ERP系统。我是XML的新手。

在我们的系统中,我们有一个XML_DATA列,其中TYPE是xmltype(2000)

架构:

<?xml version="1.0" ?> 
- <xs:schema xmlns:xs=" " attributeFormDefault="qualified"  elementFormDefault="qualified">
 - <xs:element name="XK6">
  - <xs:complexType>
   - <xs:choice maxOccurs="unbounded">

   - <xs:element name="Product">
    - <xs:complexType>
     - <xs:sequence>
      - <xs:element name="Product_row" minOccurs="0" maxOccurs="unbounded">
       - <xs:complexType>
        - <xs:sequence>

        <xs:element name="DETAIL" type="Product_DETAIL" minOccurs="0" /> 

          </xs:sequence>
         </xs:complexType>
        </xs:element>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
    </xs:choice>
   </xs:complexType>
  </xs:element>

  - <xs:simpleType name="Product_DETAIL">
   - <xs:restriction base="xs:string">
    <xs:maxLength value="1000" /> 
   </xs:restriction>
  </xs:simpleType>
 </xs:schema>

编辑:

XML:

<?xml version="1.0" encoding="utf-8" ?> 
- <XP6>
  +<collapsed_node>
  +<collapsed_node>
  +<collapsed_node>
  - <Product>
    - <Product_row>
       <DETAIL>sometext </DETAIL> 
      </Product_row>
    </Product>
  </XP6>

我怎样才能提取专栏?

还是需要更多数据呢?我想获得Product_Detail值。

sql xml oracle xmltype
1个回答
1
投票

使用“XMLTABLE”函数(请参阅https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions228.htm):

with d as (
select xmltype('
<XK6>
    <Product>
        <Product_row>
            <DETAIL>First product detail</DETAIL>
        </Product_row>
        <Product_row>
            <DETAIL>Second product detail</DETAIL>
        </Product_row>
    </Product>
</XK6>'
) as thexml from dual)
select detail from d, 
  xmltable('/XK6/Product/Product_row' 
    passing d.thexml 
    columns detail varchar2(100) path 'DETAIL') 
© www.soinside.com 2019 - 2024. All rights reserved.