2017-11-21 9 views
0

나는이 XML이 :XMLTYPE 변수 많은 XMLType을 검색

<envCFe versao="0.07" xmlns="http://www.fazenda.sp.gov.br/sat"> 
    <tpAmb>1</tpAmb> 
    <idLote>4100</idLote> 
    <cUF>35</cUF> 
    <LoteCFe> 
     <CFe> 
      <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
      </infCFe> 
     </CFe> 
     <CFe> 
      <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
      </infCFe> 
     </CFe> 
     <CFe> 
      <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
      </infCFe> 
     </CFe> 
    <dhEnvio>20171106081311</dhEnvio> 
    <nserieSAT>000081226</nserieSAT> 
</envCFe> 

을 그리고 노드 <CFe><LoteCFe 내부해야 XMLTYPE

는 다른 매개 변수로 전달하려면 같은 변수 안에 많은 선언 검색 절차, 그래서 단순화 :

SELECT 
X.nodeCFe 
FROM 
XMLTABLE(
    '/envCFe/LoteCFe' 
    PASSING XMLTYPE(
     '<envCFe versao="0.07" xmlns="http://www.fazenda.sp.gov.br/sat"> 
     <tpAmb>1</tpAmb> 
     <idLote>4100</idLote> 
     <cUF>35</cUF> 
     <LoteCFe> 
      <CFe> 
       <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
       </infCFe> 
      </CFe> 
      <CFe> 
       <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
       </infCFe> 
      </CFe> 
      <CFe> 
       <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
       </infCFe> 
      </CFe> 
      <dhEnvio>20171106081311</dhEnvio> 
      <nserieSAT>000081226</nserieSAT> 
     </LoteCFe> 
    </envCFe>' 
    ) 
    COLUMNS 
     nodeCFe XMLTYPE PATH 'CFe' 
) X 
; 

나는이 결과를 테이블로 얻으려면 무엇을 잘못 만들 수 있습니까?

nodeCFe 
------- 
<CFe><infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"></infCFe</CFe> 
<CFe><infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"></infCFe</CFe> 
<CFe><infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"></infCFe</CFe> 
+0

를 가져옵니다 .... 지금 쿼리를 다시 실행하고 무엇을 원하니? 3 개의 XMLType 값이 분리되어 있습니까? –

답변

1

루트 노드는 네임 스페이스를 선언하므로 쿼리에서 처리해야합니다. 기본 XMLNamespaces 절을 사용하여이를 수행 할 수 있습니다. 당신은 또한 당신이 추출 할 노드 아래로 이동합니다 XPath를 필요 데이터와

SELECT 
X.nodeCFe 
FROM 
XMLTABLE(
    XMLNAMESPACES(default 'http://www.fazenda.sp.gov.br/sat'), 
    '/envCFe/LoteCFe/CFe' 
    PASSING XMLTYPE(
... 

:

SELECT 
X.nodeCFe 
FROM 
XMLTABLE(
    XMLNAMESPACES(default 'http://www.fazenda.sp.gov.br/sat'), 
    '/envCFe/LoteCFe/CFe' 
    PASSING XMLTYPE(
     '<envCFe versao="0.07" xmlns="http://www.fazenda.sp.gov.br/sat"> 
     <tpAmb>1</tpAmb> 
     <idLote>4100</idLote> 
     <cUF>35</cUF> 
     <LoteCFe> 
      <CFe> 
       <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
       </infCFe> 
      </CFe> 
      <CFe> 
       <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
       </infCFe> 
      </CFe> 
      <CFe> 
       <infCFe versao="0.07" versaoDadosEnt="0.07" versaoSB="020100"> 
       </infCFe> 
      </CFe> 
      <dhEnvio>20171106081311</dhEnvio> 
      <nserieSAT>000081226</nserieSAT> 
     </LoteCFe> 
    </envCFe>' 
    ) 
    COLUMNS 
     nodeCFe XMLTYPE PATH '.' 
) X 
; 

그것은 매우 분명하지 않다

NODECFE                   
-------------------------------------------------------------------------------- 
<CFe xmlns="http://www.fazenda.sp.gov.br/sat"><infCFe versao="0.07" versaoDadosE 
nt="0.07" versaoSB="020100"> 
       </infCFe></CFe> 

<CFe xmlns="http://www.fazenda.sp.gov.br/sat"><infCFe versao="0.07" versaoDadosE 
nt="0.07" versaoSB="020100"> 
       </infCFe></CFe> 

<CFe xmlns="http://www.fazenda.sp.gov.br/sat"><infCFe versao="0.07" versaoDadosE 
nt="0.07" versaoSB="020100"> 
       </infCFe></CFe>