Duvidas sobre Merge

Tuning de Banco, Tuning de SQL, Ferramentas de tuning
Responder
david ribeiro guilherme
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 11 Jan 2005 7:44 am
Localização: Catanduva - SP
David Ribeiro Guilherme
Programador
ribeiro131@hotmail.com

Bom dia alguém poderia me explicar com detalhes para que serve o comando merge , e me mandar um exemplo.obrigado.david
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

seria o MERGE JOIN?
david ribeiro guilherme
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 11 Jan 2005 7:44 am
Localização: Catanduva - SP
David Ribeiro Guilherme
Programador
ribeiro131@hotmail.com

ENTÃO NÃO SEI EXPLICAR BEM , MAS PARECE QUE ELE FAZ UM INSERT JUNTO COM UM UPDATE, vocês TEM UM EXEMPLO.
Fabiano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qua, 23 Jun 2004 2:18 pm

Selecionar tudo

MERGE INTO nome_da_tabela D
   USING (select numero, str from teste) S
   ON (S.numero = D.numero)
   WHEN MATCHED THEN UPDATE SET D.nome_campo = S.str
   WHEN NOT MATCHED THEN INSERT (D.nome_campo)
   VALUES (S.str);
nesse exemplo bem simples a tabela destino é a que ira sofrer o insert ou update, e esta com um alias D, a teste com alias S é uma outra tabela onde serao buscadas as info para o comando merge.
na clausula on coloca a condição para o insert ou update, no caso se o numero em S for igual ao de D o update é gerado, senao o insert.

está bem simples mas espero que te ajude...

Falows...
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

david ribeiro guilherme,

O Merge é uma instrução SQL que foi inclusa no padrão Ansi SQL 2003 e que pode ser utilizada para efetuar INSERT ou UPDATE (um ou outro) e até mesmo para efetuar DELETE. Ele é ótimo para otimizar performance de cargas de dados onde você tem que verificar os dados da tabela destino para decidir se deve fazer INSERT ou UPDATE. O script que o Fabiano apresentou é um bom exemplo, porém se desejar aprender em mais detalhes essa técnica e muitas outras para tunar instruções SQL, sugiro o treinamento de SQL Tuning que irei ministrar dias 15, 22 e 29/09/2012. Mais informações: http://www.fabioprado.net/p/sql-tuning- ... racle.html


[]s

Fábio Prado
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

Desculpem estar upando um tópico de 2005, mas como já o tinha sido feito um mês atrás acho que posso seguir no mesmo tópico.

Estou tentando utilizar o MERGE, porém dentro de uma trigger.

A diferença é que ao invés de utilizar INSERT e UPDATE estou tentando utilizar as variáveis :NEW e :OLD, porém me acusa um erro que falta palavra chave, ou algo assim.

É possível utilizar o merge para essa situação?

Segue código de exemplo abaixo:

Selecionar tudo

merge INTO contrato c
 USING (
            SELECT cd_fornecedor,
                   nr_cgc_cpf
              FROM fornecedor
          ) f
    ON (c.cd_forncedor = f.cd_fornecedor)
    WHEN matched THEN :NEW.cd_fornecedor := f.cd_fornecedor
    WHEN NOT matched THEN 
       :NEW.cd_fornecedor := novo_fornecedor(:NEW.nm_responsavel_financeiro,:NEW.tp_contrato,:NEW.ds_endereco_cobranca,:NEW.nr_cpf_cgc,:NEW.nm_cidade,:NEW.nm_uf); -- essa funcao cria um fornecedor novo e retorna o Id do mesmo.
     
Após o THEN da condição MATCHED, é sinalizado o seguinte erro:

PL/SQL: ORA-00905: palavra-chave não encontrada

alguém saberia me ajudar?

Obrigado.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi jks1903,

Você teria como postar o script DDL das tabelas e da trigger (mesmo que esta compile com erro)?
Talvez fique mais fácil para o pessoal dar uma opinião.

Abraços,

Sergio Coutinho
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

STCOUTINHO escreveu:Oi jks1903,

Você teria como postar o script DDL das tabelas e da trigger (mesmo que esta compile com erro)?
Talvez fique mais fácil para o pessoal dar uma opinião.

Abraços,

Sergio Coutinho
Sergio, bom dia.
Eu estive pesquisando um pouco na documentação do Oracle e pelo que vi acho que da forma com eu estava fazendo o Oracle não permite, ao menos em sua versão 10g. No caso então, resolvi de uma outra forma. Mas a dúvida era como utilizar da forma como eu estava fazendo, pois o erro apresentado é de palavra chave não encontrada.

Mas obrigado pela resposta.
Responder
  • Informação
  • Quem está online

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