Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

claudiofreis

Leitura de campo XMLTYPE

Recommended Posts

Bom dia galera,

Estou tentando fazer a leitura de um xml e inserir numa tabela oracle, com apenas um produto eu insiro e leio com um insert table B(campo)

select(extractValue (conteudo, '/nfeProc/NFe/infNFe/det/prod/cProd', 'xmlns="http://www.portalfiscal.inf.br/nfe"')cProd)

from tabela A

 

dessa forma consigo inserir normalmente

só que se tiver mais de um produto eu não sei como fazer por tem

<det nItem="1">
- <prod>
<cProd>VND00002623</cProd>

 

eu não consigo (não sei) como ler este det nItem que altera 1,2,3..... dependendo da quantidade...ou ler o cProd que também altera criando mais um nó.

 

eu tentei criar um cursor mas mesmo assim ele diz que tem mais de um nó para ser lido.... esta seria a minha sequencia de tags com 2 produtos

/nfeProc/NFe/infNFe/det/prod </prod> item 1

/nfeProc/NFe/infNFe/det/prod/cProd </prod> item 2

se alguem puder ajudar agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Claudio,

 

Eu também tomei uma surra . Tenta assim:

 

SELECT extractValue(value(f1),'/prod/cProd','xmlns="http://www.portalfiscal.inf.br/nfe') cd_item,
extractValue(value(f1),'/prod/xProd','xmlns="http://www.portalfiscal.inf.br/nfe') ds_item,
extractValue(value(f1),'/prod/qCom','xmlns="http://www.portalfiscal.inf.br/nfe') qt_item,
extractValue(value(f1),'/prod/vProd','xmlns="http://www.portalfiscal.inf.br/nfe') Vl_item
FROM Importa_Arquivo_XML,
table(XMLSequence(extract(conteudo,'/nfeProc/NFe/infNFe/det/prod',xmlns="http://www.portalfiscal.inf.br/nfe))) f1
where extractValue(value(f1),'/prod/cProd',fn_xmlns) is not null

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Boa tarde Claudio,

 

Eu também tomei uma surra . Tenta assim:

 

SELECT extractValue(value(f1),'/prod/cProd','xmlns="http://www.portalfiscal.inf.br/nfe') cd_item,
extractValue(value(f1),'/prod/xProd','xmlns="http://www.portalfiscal.inf.br/nfe') ds_item,
extractValue(value(f1),'/prod/qCom','xmlns="http://www.portalfiscal.inf.br/nfe') qt_item,
extractValue(value(f1),'/prod/vProd','xmlns="http://www.portalfiscal.inf.br/nfe') Vl_item
FROM Importa_Arquivo_XML,
table(XMLSequence(extract(conteudo,'/nfeProc/NFe/infNFe/det/prod',xmlns="http://www.portalfiscal.inf.br/nfe))) f1
where extractValue(value(f1),'/prod/cProd',fn_xmlns) is not null

 

 

Olá, fiz e deu certo. Valeu pela dica, já estava procurando isto há 2 dias.

Só lembrando, quem for usar a dica, o "fn_xmlns" deve ser trocado por 'xmlns="http://www.portalfiscal.inf.br/nfe'

 

Mais uma coisa ... como faz pra pegar o este elemento <det nItem="1"> ... quero que retorne o numero do item

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Olá, fiz e deu certo. Valeu pela dica, já estava procurando isto há 2 dias.

Só lembrando, quem for usar a dica, o "fn_xmlns" deve ser trocado por 'xmlns="http://www.portalfiscal.inf.br/nfe'

 

Mais uma coisa ... como faz pra pegar este elemento <det nItem="1"> ... quero que retorne o numero do item

 

Consegui.....apenas uma pequena mudança ...

 

 

SELECT extractValue(value(f1),'det/@nItem','xmlns="http://www.portalfiscal.inf.br/nfe') item,

extractValue(value(f1),'det/prod/cProd','xmlns="http://www.portalfiscal.inf.br/nfe') cd_item,
extractValue(value(f1),'det/prod/xProd','xmlns="http://www.portalfiscal.inf.br/nfe') ds_item,
extractValue(value(f1),'det/prod/qCom','xmlns="http://www.portalfiscal.inf.br/nfe') qt_item,
extractValue(value(f1),'det/prod/uCom','xmlns="http://www.portalfiscal.inf.br/nfe') unidade,
extractValue(value(f1),'det/prod/vProd','xmlns="http://www.portalfiscal.inf.br/nfe') Vl_item
FROM xml_nfe a
, table(XMLSequence(extract(a.xml_arq,'/nfeProc/NFe/infNFe/det','xmlns="http://www.portalfiscal.inf.br/nfe"'))) f1
where extractValue(value(f1),'det/prod/cProd','xmlns="http://www.portalfiscal.inf.br/nfe"') is not null
and a.id_xmlnfe = 1025

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Essa eu não tentei, mas eu testaria com um contador, pra quebrar o galho.

 

Mas com certeza tem algum forma mais nobre...

 

Procure alguma coisa assim:

 

WHERE existsNode('/nfeProc/NFe/infNFe/det[nItem = "2"]')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei mais uma anotação minha que pode ajudar.

 

Select extract(conteudo,'/nfeProc/NFe/infNFe/det[1]','xmlns="http://www.portalfiscal.inf.br/nfe') from Importa_Arquivo_XML;
Select extract(conteudo,'/nfeProc/NFe/infNFe/det[2]','xmlns="http://www.portalfiscal.inf.br/nfe') from Importa_Arquivo_XML;
Select extract(conteudo,'/nfeProc/NFe/infNFe/det[3]','xmlns="http://www.portalfiscal.inf.br/nfe') from Importa_Arquivo_XML;
Select extract(conteudo,'/nfeProc/NFe/infNFe/det[4]','xmlns="http://www.portalfiscal.inf.br/nfe') from Importa_Arquivo_XML;
Select extract(conteudo,'/nfeProc/NFe/infNFe/det[5]','xmlns="http://www.portalfiscal.inf.br/nfe') from Importa_Arquivo_XML;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.