🧠 Explicação

O comando MERGE no DB2 permite combinar ações de INSERT e UPDATE numa única operação. Ele compara os dados de uma tabela origem com uma tabela destino e:

  • Atualiza os dados se já existir correspondência.

  • Insere um novo registro se não existir.

É o famoso UPSERT: update if match, insert if not.

🔧 Usos mais comuns

  • Carga incremental de dados em DWs ou sistemas legados.

  • Sincronização entre sistemas que compartilham chaves.

  • Integração de dados de sistemas externos.

  • Atualização de tabelas de histórico (SCD tipo 1).

🧾 Sintaxe

MERGE INTO destino AS D
USING (SELECT ... FROM origem) AS O
ON D.chave = O.chave
WHEN MATCHED THEN
    UPDATE SET D.col1 = O.col1, D.col2 = O.col2
WHEN NOT MATCHED THEN
    INSERT (col1, col2, chave)
    VALUES (O.col1, O.col2, O.chave);

 

💻 Exemplo prático

Suponha que você tem uma tabela CLIENTES e está carregando novos dados da tabela CLIENTES_TEMP. Se o CPF já existir, atualiza nome e email. Se não existir, insere.

MERGE INTO CLIENTES AS C
USING (SELECT CPF, NOME, EMAIL FROM CLIENTES_TEMP) AS T
ON C.CPF = T.CPF
WHEN MATCHED THEN
    UPDATE SET C.NOME = T.NOME, C.EMAIL = T.EMAIL
WHEN NOT MATCHED THEN
    INSERT (CPF, NOME, EMAIL)
    VALUES (T.CPF, T.NOME, T.EMAIL);

 

📌 Regras

  • A cláusula ON define a condição de correspondência entre os registros.

  • Só pode haver uma cláusula WHEN MATCHED e uma WHEN NOT MATCHED por instrução.

  • Pode usar subselects ou tabelas temporárias como origem (USING).

  • Precisa de privilégios de UPDATE e INSERT na tabela destino.

  • O DB2 LUW (Linux/Unix/Windows) e o z/OS têm pequenas diferenças na sintaxe — sempre consulte a versão.

💡 Dicas

  • Ideal para Substituir IF EXISTS / ELSE INSERT com muito mais elegância.

  • Em Cargas ETL, prefira MERGE para simplificar a lógica.

  • Evite MERGE com tabelas muito grandes sem índice na coluna de junção.

  • Combine com CTE (WITH) para preparar a tabela origem antes da fusão.

 

✅ Conclusão

O MERGE é o canivete suíço das cargas de dados no DB2. Junta o melhor do INSERT com o UPDATE e resolve numa tacada só o problema da existência ou não do dado. Usou certo, ganhou produtividade e clareza no código — especialmente em processos de integração e atualização massiva.