Ir para conteúdo

POWERED BY:

Arquivado

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

luan_alves

Select com update

Recommended Posts

Boa noite,

 

 

 

 

Tenho 2 tabelas e gostaria de atulizar o valor de uma utilizando a outra.

Como uma é backup da outra, então os índices são iguais.

O código ficou da seguinte forma mas não resolveu.

 

SELECT bkp.idanuncio_bkp,bkp.preco_femeas FROM anuncio_bkp AS bkp FOR UPDATE;
UPDATE anuncio SET preco_femeas = bkp.preco_femeas WHERE idanuncio = bkp.idanuncio_bkp;

A ideia do query acima, é percorrer todos os cadastros da base fazendo o update linha por linha, utilizando os dados do select.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html

 

cria uma trigger after update, dentro dela voce tem o OLD e o NEW, esses dois objetos contém todos os dados que voce precisa para atualizar o seu backup

 

 

CREATE TRIGGER nomeDaTrigger AFTER UPDATE ON tabelaPrincipal
    FOR EACH ROW
    BEGIN
         UPDATE tabelaDeBackup SET nomeDoCampo=NEW.valorQueVoceQuiser
     END;

 

o NEW pega o valor novo e o OLD o antigo, não sei qual deles voce quer jogar no backup, eu não tenho certeza se da pra colocar o update daquela forma, talvez voce precise colocar em uma string e executar ela dentro da trigger, testa da forma acima que é mais simples, se não der daí coloca o statemment

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html

 

cria uma trigger after update, dentro dela voce tem o OLD e o NEW, esses dois objetos contém todos os dados que voce precisa para atualizar o seu backup

 

 

CREATE TRIGGER nomeDaTrigger AFTER UPDATE ON tabelaPrincipal
    FOR EACH ROW
    BEGIN
         UPDATE tabelaDeBackup SET nomeDoCampo=NEW.valorQueVoceQuiser
     END;

 

o NEW pega o valor novo e o OLD o antigo, não sei qual deles voce quer jogar no backup, eu não tenho certeza se da pra colocar o update daquela forma, talvez voce precise colocar em uma string e executar ela dentro da trigger, testa da forma acima que é mais simples, se não der daí coloca o statemment

 

Paulo boa tarde,

 

Da forma como você passou o banco irá esperar uma ação (update) para atualizar a tabela backup. E o que eu quero é ler o que esta na tabela anuncio (select) e atualizar todos os dados de acordo com a linha percorrida.

Creio que isso se resolve com uma procedure.

 

Estou tentando criar mais estou tendo problemas na forma de informar os campos do select para as variáveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém precisa disparar esse evento, esse cara vai ser o select? Se for, não entendi porque tem que ser ele ja que os dados não são afetados pelo select, logo nem o backup seria....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém precisa disparar esse evento, esse cara vai ser o select? Se for, não entendi porque tem que ser ele ja que os dados não são afetados pelo select, logo nem o backup seria....

 

Bom vamos lá,

 

Esse cara simplesmente, vai pegar os dados da tabela backup e em tempo de execução vai atualizar a tabela anuncios.

isso só será feito uma única vez, isto esta sendo feito, porque perdemos os dados da tabela anuncios e subimos o backup.

 

Bom vamos lá,

 

Esse cara simplesmente, vai pegar os dados da tabela backup e em tempo de execução vai atualizar a tabela anuncios.

isso só será feito uma única vez, isto esta sendo feito, porque perdemos os dados da tabela anuncios e subimos o backup.

 

senhores, obrigado pela atenção de todos.

 

Consegui resolver da seguinte forma.

 

DELIMITER $$

CREATE PROCEDURE `atualiza_dados_teste`()
BEGIN

	DECLARE idlinks2 INT;
	DECLARE data_alteracao2 TIMESTAMP;
	DECLARE existe_mais_linhas INT DEFAULT 0;  

 -- Definição do cursor
  DECLARE meuCursor CURSOR FOR SELECT idlinks,data_alteracao FROM links;
 -- Definição da variável de controle de looping do cursor
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

  -- Abertura do cursor
  OPEN meuCursor;

  -- Looping de execução do cursor
  meuLoop: LOOP
  FETCH meuCursor INTO idlinks2,data_alteracao2;
		UPDATE parceiros SET data_ativacao=data_alteracao2 WHERE idlinks = idlinks2;
  -- Controle de existir mais registros na tabela
  IF existe_mais_linhas = 1 THEN
	LEAVE meuLoop;
  END IF;
	
  -- Retorna para a primeira linha do loop
  END LOOP meuLoop;
END

 

observação: o exemplo exposto aqui foi utilizado em outra tabela, sendo assim as colunas estão alteradas.

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.