Comando MERGE é DML

Comando MERGE é DML!

03/18/2009 às 12 | Na categoria Dicas | 3 Comentários

Quando se enunciam os comandos que fazem parte da categoria DML na linguagem SQL, é esquecido esse comando tão útil que é o MERGE. Apesar de ser um dois em um, e de resultar em um ou mais INSERTs ou UPDATEs, a operação que a BD executa é um MERGE e essa operação é atómica.

Vejamos um exemplo em que eu quero fundir as linhas de uma query à tabela T_BASE com uma tabela T_LOTES:

MERGE INTO t_lotes t

USING (select adro, funcaofixe(classe,’Y’) classe, po, count(*) ext

from t_base t

where siadro < ’900′

and po < ’33′

group by adro, funcaofixe(classe,’Y’) classe, po) t2

ON ( t.po = t2.po and t.classe = t2.classe and t.adro = t2.adro)

WHEN MATCHED THEN

UPDATE SET t.ext = t2.ext

WHEN NOT MATCHED THEN

INSERT  ( adro, po, classe, ext)

VALUES (t2.adro, t2.po, t2.classe, t2.ext );

Se eventualmente existirem 30 linhas novas da T_BASE para a T_LOTES, e ainda forem actualizadas mais 20 linhas na T_LOTES com o valor da coluna EXT da tabela T_BASE: no total foram merged 50 linhas e esta operação é atómica.

Este isolamento permite usar as mesmas funcionalidades dos outros comandos DML tais como os savepoints implícitos, que permitem por exemplo anular os 30 inserts e 20 updates caso o comando MERGE falhe como um todo.

É pois da mais elementar justiça lembrarem-se deste comando e usá-lo porque poupa imenso trabalho!

 

Sobre Alexandre Pires

ORACLE OCS Goldengate Specialist, OCE RAC 10g R2, OCP 12C, 11g, 10g , 9i e 8i - Mais de 25 anos de experiência na área de TI. Participei de projetos na G&P alocado na TOK STOK, EDINFOR alocado na TV CIDADE "NET", 3CON Alocado no PÃO DE AÇUCAR, DISCOVER alocado na VIVO, BANCO IBI e TIVIT, SPC BRASIL, UOLDIVEO alocado no CARREFOUR e atualmente na ORACLE ACS atendendo os seguintes projetos: VIVO, CLARO, TIM, CIELO, CAIXA SEGUROS, MAPFRE, PORTO SEGURO, SULAMERICA, BRADESCO SEGUROS, BANCO BRADESCO, BASA, SANTANDER, CNJ, TSE, ELETROPAULO, EDP, SKY, NATURA, ODEBRESHT, NISSEI, SICREDI, CELEPAR, TAM, TIVIT, IBM, SMILES, CELEPAR, SERPRO,OKI,BANCO PAN, etc
Esse post foi publicado em PLSQL SCRIPTS, PLSQL TUNING e marcado , , . Guardar link permanente.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s