Извлечь значение из столбца (xmltype) - PullRequest
1 голос
/ 01 апреля 2019

Мы используем систему ERP. Я новичок в XML.

В нашей системе у нас есть столбец XML_DATA, тип которого 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>

EDIT:

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.

1 Ответ

1 голос
/ 01 апреля 2019

Используйте функцию "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') 
...