2014-11-12 2 views
0

Oracle 10g 데이터베이스에서 XMLTABLE Function을 사용하고 XML에서 값을 Oracle Table로 추출하려고합니다.Oracle DB - XMLTABLE을 사용하여 XML 데이터 추출

SELECT * 
FROM xmltable(
       xmlnamespaces ('http://www.cool.com/totem/1.1' AS "n1"), '/n1:totem/n1:results' 
       PASSING xmltype.createxml(('<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
              <totem xmlns="http://www.cool.com/totem/1.1"> 
               <results> 
                <valuationDate>2014-07-31</valuationDate> 
                <clientID>220</clientID> 
                <energy> 
                 <underlier> 
                  <name>CO2 CER</name> 
                  <group>European Emissions</group> 
                  <units>EUR/MT</units> 
                  <pricingTime>LDN 17:00</pricingTime> 
                  <instrument> 
                   <period>Month</period> 
                   <startDate>2014-12-01</startDate> 
                   <endDate>2014-12-31</endDate> 
                   <type>Forward</type> 
                   <price>0.25852</price> 
                   <priceOut>r</priceOut> 
                   <contributors>15</contributors> 
                  </instrument> 
                 </underlier> 
                               <underlier> 
                  <name>CO2 CER</name> 
                  <group>European Emissions</group> 
                  <units>EUR/MT</units> 
                  <pricingTime>LDN 17:00</pricingTime> 
                  <instrument> 
                   <period>Month</period> 
                   <startDate>2014-12-01</startDate> 
                   <endDate>2014-12-31</endDate> 
                   <type>Forward</type> 
                   <price>0.25852</price> 
                   <priceOut>r</priceOut> 
                   <contributors>15</contributors> 
                  </instrument> 
                 </underlier> 
                </energy> 
               </results> 
              </totem>' 
              )) 
       COLUMNS  valuationDate  varchar2(500)   PATH 'n1:valuationDate', 
            clientID    varchar2(500)   PATH 'n1:clientID', 
            name     varchar2(500)   PATH 'n1:energy/n1:underlier/n1:name', 
            group1    varchar2(500)  PATH 'n1:energy/n1:underlier/n1:group', 
            units    varchar2(500)   PATH 'n1:energy/n1:underlier/n1:units', 
            pricingTime   varchar2(500)   PATH 'n1:energy/n1:underlier/n1:pricingTime', 
            period    varchar2(500)   PATH 'n1:energy/n1:underlier/n1:instrument/n1:period', 
            startDate   varchar2(500)   PATH 'n1:energy/n1:underlier/n1:instrument/n1:startDate', 
            endDate    varchar2(500)   PATH 'n1:energy/n1:underlier/n1:instrument/n1:endDate', 
            type     varchar2(500)   PATH 'n1:energy/n1:underlier/n1:instrument/n1:type', 
            price    varchar2(500)   PATH 'n1:energy/n1:underlier/n1:instrument/n1:price', 
            priceOut    varchar2(500)   PATH 'n1:energy/n1:underlier/n1:instrument/n1:priceOut', 
            contributors   varchar2(500)   PATH 'n1:energy/n1:underlier/n1:instrument/n1:contributors' 
    ) AS instrument 

O/P는 다음과 같습니다

XMLNLS_NS VALUATIONDATE CLIENTID NAME GROUP1 PERIOD STARTDATE ENDDATE TYPE PRICE PRICEOUT CONTRIBUTORS 
      2014-07-31  220  

가 어떻게 태그의 나머지 값을 채울/추출 할 수 있습니다?

편집 : 감사. 하지만 하나 이상의 underliner있을 때, 나는 다음과 같은 얻을 오류 ORA-19279 : XPTY0004 - XQuery를 동적 유형 불일치 : 싱글 순서 기대는 - 다중 항목 순서

답변

1

를 사용하여 올바른 네임 스페이스를 얻었다. 네임 스페이스는 상속되므로 여기에있는 모든 요소는 기본적으로 http://www.cool.com/totem/1.1 네임 스페이스에 있습니다. 예를 들어,

n1:results/energy/underlier/name 

내가 FOLL을 얻을, 나는 더 이상 underlier이있을 때

n1:results/n1:energy/n1:underlier/n1:name 
+0

감사 Dirkk ... 나는 여전히하는 문제가되어야한다. 오류 : ORA-19279 : XPTY0004 - XQuery 동적 유형 불일치 : 예상되는 싱글 톤 시퀀스 - 다중 항목 시퀀스 –

+0

오류 메시지와 사용자 자신이 말하길 : 여러 개의 'underlier' 요소가 있지만 오라클은 하나를 기대합니다. 네가 필요로하는 것이 지금은 없어. 첫 번째 것을 원한다면, 사용자'underlier [1]' – dirkk

+0

어떻게 모든 것을 얻을 수 있습니까? –