Questão nº 33
Questão de Banco de Dados · FCC TST 2017 (nº 33)
Para atualizar as linhas da tabela `backup_employees` de forma que corresponda à tabela `employees`, um Analista de Sistemas utilizou a instrução abaixo em um banco de dados Oracle aberto e em condições ideais.
```sql
MERGE INTO backup_employees bac
```
I
```sql
(SELECT FROM employees) emp
ON (bac.employee_id = emp.employee_id)
```
II
```sql
UPDATE SET
bac.name = emp.name,
bac.job_id = emp.job_id,
bac.salary = emp.salary1.5,
bac.commission = emp.commission,
DELETE WHERE (emp.commission IS NOT NULL)
```
III
```sql
INSERT VALUES(emp.employee_id, emp.name, emp.job_id,
emp.salary, emp.commission);
```
Para que a sintaxe da instrução esteja correta, as lacunas I, II e III devem ser preenchidas, correta e respectivamente, por
- A`WITH − WHEN FOUND THEN − WHEN NOT FOUND THEN`
- B`FROM − IF FOUND THEN − ELSE`
- C`WITH − IF MATCHED THEN − OTHERWISE`
- D`USING − WHEN MATCHED THEN − WHEN NOT MATCHED THEN` (alternativa correta)
- E`USING − IF FOUND THEN − IF NOT FOUND THEN`
Resposta comentada
Gabarito Alternativa D
O comando MERGE no SQL Oracle é uma ferramenta poderosa que permite sincronizar dados entre duas tabelas (uma de destino e uma de origem) em uma única instrução, realizando operações de inserção, atualização e/ou exclusão com base em condições de correspondência.
- (A) Incorreta:
WITHé usado para definir Common Table Expressions (CTEs), não para especificar a fonte doMERGE.WHEN FOUND THENeWHEN NOT FOUND THENnão são a sintaxe correta para as cláusulas de correspondência doMERGE. - (B) Incorreta:
FROMé usado emSELECTe outras cláusulas para especificar tabelas, mas não para a fonte doMERGE.IF FOUND THENeELSEnão são a sintaxe correta para as cláusulas de correspondência doMERGE. - (C) Incorreta:
WITHestá incorreto.IF MATCHED THENeOTHERWISEnão são a sintaxe correta para as cláusulas de correspondência doMERGE. - (D) Correta:
USINGé a palavra-chave correta para especificar a tabela ou subconsulta de origem que será comparada com a tabela de destino.WHEN MATCHED THENé a cláusula usada para definir as ações (UPDATE e/ou DELETE) quando uma linha da tabela de origem encontra uma correspondência na tabela de destino.WHEN NOT MATCHED THENé a cláusula usada para definir as ações (INSERT) quando uma linha da tabela de origem não encontra correspondência na tabela de destino. - (E) Incorreta:
USINGestá correto, masIF FOUND THENeIF NOT FOUND THENnão são a sintaxe correta para as cláusulas de correspondência doMERGE. A armadilha aqui é queIF FOUNDé uma construção comum em outras linguagens ou contextos de banco de dados, mas não noMERGEdo Oracle.
Fonte: FCC TST 2017 Analista Judiciário - Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.