Ir para conteúdo

Arquivado

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

Mitaco

Como Ler um XML vindo de uma STRING.

Recommended Posts

Pessoal boa noite, sou novo com Oracle e por isso mal sei Criar uma Proc, mas vamos ao meu problema.
Preciso Criar uma PROC que irá receber por Parametro uma String contendo um XML, ou seja, um XML em STRING. Preciso ler cada Nó do XML(string) e atualizar uma tabela.
Minha pergunta é, como faço para ler cada nó do XML(string) no Oracle?

Exemplo do XML:

<ROOT>
 <DADO>
    <NOME>TESTE</NOME>
    <TELEFONE>12345678</TELEFONE>
    <EMAIL>TESTE@GMAIL.COM</EMAIL>
 </DADO>
 <DADO>
    <NOME>TESTE 2</NOME>
    <TELEFONE>12345678</TELEFONE>
    <EMAIL>TESTE2@GMAIL.COM</EMAIL>
 </DADO>
</ROOT>

 

Oracle tenho a seguinte PROC:

CREATE OR REPLACE PROCEDURE SP_TESTE_XML
(
	@XML	IN VARCHAR2
)
AS
 UPDATE TABELA SET NOME = ... AND TELEFONE = .... AND EMAIL = ... WHERE NOME = ...
DECLARE
BEGIN
END;

 

Se puderem me ajudar eu agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oracle possuí uma extensa biblioteca de funções para XML (packages etc) , só usei uma vez para gerar um XML e não ler, acabou que nem foi usada as funções do Oracle.

 

Em todo o caso já deu uma lida na Documentação ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta eu estou tentando fazer com base em alguns links que estou achando na NET, porém não tenho certeza de que esteja certo. E para ajudar não tenho Oracle instalado na maquina do trabalho e os caras "Superiores" não querem que seja instalado, então estou virado no "jiraya". Você pode dar uma analisada no código abaixo só para saber se aparentemente a estrutura esta ok? Bom segue o código como esta ficando:

 

CREATE OR REPLACE PROCEDURE SP_ATUALIZA_DADOS ( @xmlDocument IN VARCHAR2 ) 
DECLARE 
xml xmlType := xmlType(@xmlDocument); 
COD_REG INT; COD_OCORR INT; 
DESC_ERRO VARCHAR2; 
BEGIN 
FOR atualizaDados IN 
( SELECT TO_INT(extractvalue(xml, 'ROOT/DADOS/IDREG')) CODREG, TO_INT(extractvalue(xml, 'ROOT/DADOS/IDOCORR')) CODOCORR, extractvalue(xml, 'ROOT/DADOS/DESCERRO') DESCERRO INTO COD_REG, COD_OCORR, DESC_ERRO FROM dual; ) 
LOOP 
  UPDATE TBDados SET DESCERRO = DESC_ERRO, WHERE CODREG = COD_REG AND CODOCORR =   COD_OCORR 
END LOOP; 
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Oracle tem uma licença free (Oracle Express Edition (XE)) se for este o problema.

 

Aparentemente a SP está ok, dá agum erro ?

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.