从XMLType变量中检索多个XMLType

从XMLType变量中检索多个XMLType,xml,oracle,xmltype,xmltable,Xml,Oracle,Xmltype,Xmltable,我有以下XML: <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=

我有以下XML:

<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>
如果将此结果作为表格,我会犯什么错误

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>

您的根节点声明了一个名称空间,所以您需要在查询中处理它;您可以使用默认的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
;
得到


不太清楚。。。。您的查询现在重新运行什么,您想要什么?三个单独的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>