ler aqruivo xml , localizar registro e atualiza no banco

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Joao Moraes
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 44
Registrado em: Qua, 04 Jan 2006 9:12 am
Localização: Botucatu - SP
Contato:

boa tarde a todos!

Tenho um arquivo xml que gero com os registros da minha base de dados, neste arquivo mando todos os dados de um paciente, entre eles a matricula(controle meu) e o numero de cartão(controle de outra entidade), o numero do cartao que vai no arquivo que gero é provisório.
Envio este arquivo para outra entidade que vai gerar um numeor de cartão definitivo, ápós isto o arquivo volta pra mim e tenho que procurar no banco de dados e atualizar o campo cartão, agora com o número definitivo.

alguma dica?
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China

Olá

Não sei se te entendi muito bem, mas se você gera um numero de cartão provisório ao meu entender você terá que manter esse número provisório dentro do arquivo que volta para você, para que dai possa consultar por ele e dai sim atualizar.

Bem para consultar isso dentro do arquivo você terá que ler essa planilha, uma dica seria usar essa rotina que tem nesse link

http://glufke.net/oracle/viewtopic.php? ... light=ole2
rafaelfrocha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qua, 31 Out 2007 9:30 am
Localização: Uberlândia
Rafael Rocha

Amigo,

Se você for trabalhar com XML, aconselho a você manipular este tipo de dados dentro de uma coluna XMLType.

Deixa te dar um exemplo:

- Imagine uma tabela com duas colunas: idTransacao (Number) e xmlRetorno (XMLType). Com um procedimento (há vários exemplos na Internet), você pode carregar um arquivo xml para a coluna XMLType de sua tabela.

Exemplo de um XML:

Selecionar tudo

  <?xml version="1.0" encoding="UTF-8" ?> 
  <cancNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.07">
  <infCanc Id="ID31080765382137000101550000000000240006169719">
  <tpAmb>2</tpAmb> 
  <xServ>CANCELAR</xServ> 
  <chNFe>31080765382137000101550000000000240006169719</chNFe> 
  <nProt>310000000162316</nProt> 
  <xJust>TESTE DE CANCELAMENTO - SEXTA FEIRA</xJust> 
  </infCanc>
  </cancNFe>
Para manipular o XML, extrair dados de uma das tags, você pode utilizar um select extractvalue.

Imagine que iremos capturar o conteúdo da tag "nProt". EX:

Selecionar tudo

 select extractvalue(a.xmlretorno, /cancNFe/infCanc/nProt, 'http://www.portalfiscal.inf.br/nfe')
 into xNProt
 from tabelaXML a
 where and a.idtransacao  = xID_transacao;
Espero ter ajudado!

Rafael
Joao Moraes
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 44
Registrado em: Qua, 04 Jan 2006 9:12 am
Localização: Botucatu - SP
Contato:

schnu

em ralação ao cartão provisório, não é ele minha chave, mas sim a matricula!

vejam o que fiz:

usei o jdom e consigo ler o arquivop xml, e fazer consultas! Agora minha dúvida é:
preciso pegar a matricula do paciente que está no xml e consultar na tabela paciente, se achar comparo se o numero do cartão são os mesmos, caso não seja atualizo o cartão na tabela paciente de acordo com o que está no xml!
A dúvida é como implementar isso? Alguém poderia me dar uma idéia?
Já tenho a classe que lê e varre os dados no xml funcionando!

Selecionar tudo

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import java.util.List;
import java.util.Iterator;
import java.sql.*;        
import java.util.ArrayList;
public class LeXML {
     @SuppressWarnings ("unchecked")
     private Connection conn;
     private Statement stmt;
     private ResultSet rs;
     public static void main(String args[]){
         Document doc = null;
          SAXBuilder builder = new SAXBuilder();
         try{
             doc=builder.build("teste2.xml");
             
         }catch (Exception e){
             e.printStackTrace();
         }
         
         Element DADOS = doc.getRootElement();
         List<Element>lista =DADOS.getChildren();
         Iterator i = lista.iterator();
         while (i.hasNext())
         {
         //for (Element e: lista){
            // System.out.println(e.getChildText("ENDERECO"));
             Element l =(Element) i.next();
             if(l.getChild("USUARIOS").getChild("USUARIO").getAttributeValue("CO_USUARIO")!=null);//.equalsIgnoreCase("3465")){
             System.out.println("USUARIO:"+l.getChild("USUARIOS").getChild("USUARIO").getAttributeValue("CO_USUARIO"));
             System.out.println("CODIGO DO ENDEREÇO:"+l.getAttributeValue("CO_ENDERECO"));
             System.out.println("CODIGO DO MUNICÍPIO:"+l.getAttributeValue("CO_MUNICIPIO"));
             System.out.println("CNS:"+l.getChild("USUARIOS").getChild("USUARIO").getChild("GRUPO_CNS").getChild("CNS").getAttributeValue("CO_NUMERO_CARTAO"));
             System.out.println("----------------------------------");
             }
         }
    
      
             }catch(SQLException e){
                 throw new ConnectioNDAOException(e.getMessage());
             }
             
         }
       }
//}
davi_2009
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 05 Mar 2009 12:23 pm
Localização: são Paulo SP

Olá
Estou precisando importar um arquivo xml que está em determinado diretorio no unix para um campo xmltype de uma tabela. alguém sabe como fazer usando pl/sql ??

Grato
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brow, beleza?

Cara, dá uma pesquisada aqui no fórum por XML que irá encontrar exemplos interessantes como estes abaixo:

Clob to Xmltype
http://www.glufke.net/oracle/viewtopic. ... ht=xmltype

Ler XML e inserir no banco
http://www.glufke.net/oracle/viewtopic.php?t=[/b]020&highlight=xml


Qualquer dúvida, manda pra gente.
davi_2009
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 05 Mar 2009 12:23 pm
Localização: são Paulo SP

beleza cara....

Então eu já havia pesquisado estes dois tópicos, mas eles mostram como se extrai informações de dentro do xml para uma tabela.

eu na verdade estou em um passo anterior que é pegar o arquivo em uma area do servidor (ftp por exemplo) e gravar este arquivo dentro do banco ( no meu caso um xmltype) para que depois sim, eu possa ler esse arquivo usando os topicos acima.

desde já agradeço

Abraço
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Então brother,

Dá uma olhada como buscar do teu servidor.
Para passar para um XMLType, também tem exemplos nos links.

Você pode dar um insert do teu Clob usando a função XMLType.

Por exemplo:

Selecionar tudo


INSERT INTO tua_table (tua_col_xmltype)
     VALUES XMLTYPE(vtua_informacao_clob);
Acho que da versão 9i em diante já existe essa função pronta do Oracle.

Qualquer coisa, manda pra gente.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes