Ir para conteúdo

POWERED BY:

Arquivado

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

Filipe Rodrigues

[Resolvido] Como Fazer Uma Atualização ?

Recommended Posts

Boa noite.... Como Sou(Newbie)novo ainda mexendo com MySQL e Banco de dados estou cheio de duvidas , mas o problema e o Seguinte :

estou desenvolvendo uma aplicação que recebe um arquivo em CSV e tem que fazer algumas comparações antes de atualizar a tabela Final .

 

No caso eu Criei uma tabela temporária para receber os dados do CSV... mas ai que vem o problema, eu tenho o seguinte Algorítimo para seguir:

se

CSV.cod <> Tabela_Final.cod 

inserir novo dado ;

se

 CSV.cod = Tabela_Final.cod  

Compare:

CSV.Endereco <> Tabela_Final.Endereco 

Atualiza Endereço

 SET  Tabela_Final.Endereco =CSV.Endereco

 

Como posso Implementar esse algorítimo com SQL ????

Agradeço a atenção :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite amigo,

 

Eu tenho um programa que faz exatamente isso lá na empresa, porém utilizo DB2 (acredito que vá funcionar assim mesmo), segue:

 

BEGIN ATOMIC 
   IF NOT EXISTS ( SELECT COD FROM TABELA_FINAL WHERE COD = "Codigo da tabela CSV que você vai passar por parâmetro" ) THEN INSERT INTO TABELA_FINAL (colunas da tabela) VALUES (valores de cada coluna do novo dado que está inserindo) ; 
   ELSE IF EXISTS ( SELECT ENDERECO FROM TABELA_FINAL WHERE COD = "Código" AND ENDERECO <> "Endereço" ) THEN UPDATE TABELA_FINAL SET ENDERECO = "Novo endereço" WHERE COD = "Código da temporária" ; 
   END IF; 
END;

 

É mais ou menos isso, tu pode passar os campos que eu citei acima como parâmetro? Se não teremos que fazer com uma subquery.

 

Fico a disposição, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Diego Obrigado por responder eu entendi a logica e para inserir eu fiz assim

 

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ATUALIZA`()
BEGIN
 IF  EXISTS (SELECT * FROM TEMPORARIA WHERE NOT EXISTS (SELECT * FROM TABELA_FINAL WHERE TABELA_FINAL.cod = TEMPORARIA.cod))
 THEN insert into TABELA_FINAL (cod , nome , Endereco )  SELECT * FROM TEMPORARIA WHERE NOT EXISTS (SELECT * FROM TABELA_FINAL WHERE TABELA_FINAL.cod = TEMPORARIA.cod) ;
 END IF;
END

 

mas para atualizar não deu certo =/ o que eu coloco no "Novo Endereço" :ermm:

SET ENDERECO = "Novo endereço"

 

Agradeço mais uma vez a atenção :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Filipe,

 

No "Novo Endereço" você coloca o endereço que vai ser atualizado caso já exista o registro que você quer.

 

Entendi mais ou menos essa tua PROCEDURE, você não fez um ELSE pra ela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro mais uma vez muito obrigado pela ajuda Diego

 

A minha PROCEDURE não tem um Else por que era só um teste

 

bom e aqui esta a pronta PROCEDURE :lol:

 

 DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ATUALIZA`()
BEGIN

      IF  EXISTS (SELECT * FROM Temporaria WHERE NOT EXISTS (SELECT * FROM Tabela_final      WHERE Tabela_final.cod = Temporaria.cod))
                 THEN 
                    insert into mst (cod , nome , Endereco) 
                              SELECT * FROM Temporaria
                                          WHERE NOT EXISTS (SELECT * FROM Tabela_final WHERE  Tabela_final.cod = Temporaria.cod) ;
      ELSE 

      IF (SELECT * FROM Temporaria WHERE EXISTS ( SELECT * FROM  Tabela_final WHERE Tabela_final.cod = Temporaria.cod AND Tabela_final.nome <> Temporaria.nome)) 
        THEN 
           UPDATE FROM Tabela_final , Temporaria 
                SET FROM Tabela_final.Endereco = Temporaria.Endereco 
                  WHERE Tabela_final.cod = Temporaria.cod AND  Tabela_final.Endereco <> Temporaria.Endereco ;
  END IF;
END IF;
END

 

Mais Uma Vez muito obrigado pela ajuda :clap:

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.