sexta-feira, 2 de abril de 2021

Estudando para o exame de certificação Oracle Database SQL | 1Z0-071 - Comando Merge


Fala, galera. Tudo bem?

Hoje vou falar um pouco sobre o comando MERGE.

O MERGE é um comando DML que combina as funções de insert, update e delete. O uso do MERGE possibilita a combinação dos comandos citados de maneira mais eficiente do que fazê-los separadamente, o que o torna a opção preferencial.

Vamos ao exemplo, para trazer o funcionamento do comando irei criar as tabelas abaixo/ inserir alguns dados pra gente poder trabalhar.


CREATE TABLE TAB01(ID NUMBER
                                         ,NOME VARCHAR2(10))
/                    

                    

CREATE TABLE TAB02(ID NUMBER
                                         ,NOME VARCHAR2(10))
/


INSERT INTO TAB01 VALUES(1, 'JOAO');
INSERT INTO TAB01 VALUES(2, 'MANOEL');
INSERT INTO TAB01 VALUES(3, 'ANTONIO');
INSERT INTO TAB01 VALUES(4, 'LUAN');
INSERT INTO TAB01 VALUES(5, 'ROGERIO');
--

INSERT INTO TAB02 VALUES(1, 'MARCOS');
INSERT INTO TAB02 VALUES(2, 'MARCELO');
INSERT INTO TAB02 VALUES(7, 'ANTONIO');
INSERT INTO TAB02 VALUES(8, 'LUAN');
INSERT INTO TAB02 VALUES(9, 'ROGERIO');
INSERT INTO TAB02 VALUES(10, 'DAVID');

COMMIT;
/

Query na tab01/ 02 p/ evidenciar os registros antes da execução do comando.










Obs: Note que os id's 1 e 2 existem em ambas as tabelas porém com nomes diferentes.


Sintaxe do comando (Retirada do Site Oficial da Oracle) https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606





















Utilização do comando:



MERGE INTO TAB01

USING TAB02

  ON (TAB01.ID = TAB02.ID)

WHEN MATCHED THEN 

  UPDATE SET TAB01.NOME = TAB02.NOME

  DELETE WHERE TAB01.NOME = 'MARCOS'

WHEN NOT MATCHED THEN 

  INSERT VALUES(TAB02.ID, TAB02.NOME)

WHERE TAB02.ID >1;



O que foi feito no comando acima, fizemos um merge das linhas da tab02 na tab01, respeitando a condição definida no where onde só traria as linhas da tabela dois que tivessem o ID > 1 ou seja, é possível filtrar os registros, fizemos um update caso o mesmo id fosse encontrado nas duas tabelas, caso não fosse o registro seria inserido, também deletamos um dos registros na tab01, resultado:













Espero que gostem e até a próxima.


Leonardo Silva.




Nenhum comentário:

Postar um comentário

Estudando para o exame de certificação Oracle Database SQL | 1Z0-071 - Comando Merge

Fala, galera. Tudo bem? Hoje vou falar um pouco sobre o comando MERGE. O MERGE é um comando DML que combina as funções de insert, update e d...