Dúvidas sobre o MERGE em Oracle

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
guillan
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 30 Mar 2011 2:10 pm
Localização: niteroi - RJ

Olá!
Sou novo por aqui e gostaria da ajuda de vocês...
Estou com dúvidas sobre o funcionamento do comando merge.
eis o caso:

tenho uma tabela origem(tb_origem) e uma tabela destino(tb_destino);
as tabelas são enormes, e, para otimização do processo, busco sempre a melhor solução;
a tb_destino é carregada mensalmente com as possíveis atualizações da tb_origem;
para isso, utilizo o comando merge, onde rodo um update, caso haja correspondente na tabela destino, ou faço insert, caso a chave do registro não seja encontrada.
até aqui eis uma situação normal.
a minha dúvida é:
ex:
merge into tb_destino d
using(select * from tb_origem) o
on (d.chave = o.chave)
when matched then
update
when not matched then
insert

caso o registro seja correspondente nas duas tabelas, automaticamente ele faz update;
mas, e se ele encontrou o seu correspondente, mas não houve nenhum tipo de alteração no registro? ele faz update assim mesmo???
se sim, significaria q ele atualiza todo o registro mesmo que seja com os mesmos valores...

alguém sabe ou já teve essa dúvida?

abs
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

mas, e se ele encontrou o seu correspondente, mas não houve nenhum tipo de alteração no registro? ele faz update assim mesmo???
Sim, mas você pode usar a cláusula WHERE no comando de update...
guillan
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 30 Mar 2011 2:10 pm
Localização: niteroi - RJ

po, blza.
assim eu já consigo passar pelos campos q não sofreram alterações...
agora só falta eu conseguir atualizar apenas as colunas que foram alteradas...rs
minha tabela tem cerca de 40 colunas e acho desnecessário atualizar todo o registro por conta de uma vírgula que foi inserida na coluna 37...

vlw!
Responder
  • Informação