🧠 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.