Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
pyro
Rank: DBA Sênior
Mensagens: 323 Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT
Ter, 14 Mai 2013 7:41 am
Pessoal, tenho o seguinte XML que está carregado dentro de uma variável XMLType:
Selecionar tudo
<cab>
<nome>Joao</nome>
</cab>
<dados>
<idade>32</idade>
<opt>sim</opt>
</dados>
Estou tentando capturar o seu nome de dentro da variável XMLType desta forma:
Selecionar tudo
var_nome := varXml.extract('/cab/nome/text()').getstringval();
Porém está disparando o seguinte erro:
Selecionar tudo
erro: ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00245: extra data after end of document
Os exemplos que encontrei, todos se baseiam em tabelas para manipular XML, existe uma forma do Oracle manipular um XML sem ser por tabelas?
carloscsilva
Rank: Programador Júnior
Mensagens: 22 Registrado em: Qui, 26 Jul 2012 8:55 am
" Pense diferente! - "
Ter, 14 Mai 2013 3:09 pm
Boa tarde, pyro!
Segue abaixo um exemplo de xml, através de um SQL. Os métodos mais usados para manipular XML são com eles gravados em tabela, devido a necessidade de ficar um processo automático.
Selecionar tudo
select *
from XMLTable
(
'for $documento in /documento
for $itens in $documento/itens
for $item in $itens/item
return <row>
{ $documento
, $itens
, $item
}
</row>
'
passing
( XMLTYPE
( '<?xml version="1.0" encoding="ISO-8859-1" ?>
<conciliacao_doc>
<dt_emissao>20111213</dt_emissao>
<documento>
<tipo_doc>T</tipo_doc>
<num_doc>120</num_doc>
<dt_mov>20111201</dt_mov>
<local_origem>A1</local_origem>
<destinatario_nome>LocalA</destinatario_nome>
<destinatario_cpf />
<destinatario_cnpj>34343232123467</destinatario_cnpj>
<itens>
<item>
<transacao>475</transacao>
<tipo_transacao>I</tipo_transacao>
<tipo_mov_bo />
<cod_produto>222</cod_produto>
<qtd_transacao>5</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
<item>
<transacao>476</transacao>
<tipo_transacao>I</tipo_transacao>
<tipo_mov_bo />
<cod_produto>3455</cod_produto>
<qtd_transacao>5</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
<item>
<transacao>477</transacao>
<tipo_transacao>I</tipo_transacao>
<tipo_mov_bo />
<cod_produto>3000</cod_produto>
<qtd_transacao>5</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
</itens>
</documento>
<documento>
<tipo_doc>B</tipo_doc>
<num_doc>2301</num_doc>
<dt_mov>20111201</dt_mov>
<local_origem>B</local_origem>
<destinatario_nome />
<destinatario_cpf />
<destinatario_cnpj />
<itens>
<item>
<transacao />
<tipo_transacao />
<tipo_mov_bo>E</tipo_mov_bo>
<cod_produto>1000</cod_produto>
<qtd_transacao>6</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
<item>
<transacao />
<tipo_transacao />
<tipo_mov_bo>E</tipo_mov_bo>
<cod_produto>1096</cod_produto>
<qtd_transacao>6</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
<item>
<transacao />
<tipo_transacao />
<tipo_mov_bo>E</tipo_mov_bo>
<cod_produto>1097</cod_produto>
<qtd_transacao>6</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
<item>
<transacao />
<tipo_transacao />
<tipo_mov_bo>E</tipo_mov_bo>
<cod_produto>1099</cod_produto>
<qtd_transacao>6</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
<item>
<transacao />
<tipo_transacao />
<tipo_mov_bo>S</tipo_mov_bo>
<cod_produto>7021</cod_produto>
<qtd_transacao>1</qtd_transacao>
<unid_medida>un</unid_medida>
</item>
</itens>
</documento>
<tot_itens_arquivo>8</tot_itens_arquivo>
</conciliacao_doc>'
).extract('conciliacao_doc/documento')
)
columns num_doc number path 'documento/num_doc'
, transacao number path 'item/transacao'
, tipo_transacao varchar2(5) path 'item/tipo_transacao'
, tipo_mov_bo varchar2(5) path 'item/tipo_mov_bo'
, cod_produto number path 'item/cod_produto'
, qtd_transacao number path 'item/qtd_transacao'
, unid_medida varchar2(5) path 'item/unid_medida'
)
Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes