Para atualizar as linhas da tabela backup_employees de forma...
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.
MERGE INTO backup_employees bac
..I.. (SELECT * FROM employees) emp
ON (bac.employee_id = emp.employee_id)
..II..
UPDATE SET
bac.name = emp.name,
bac.job_id = emp.job_id,
bac.salary = emp.salary*1.5,
bac.commission = emp.commission,
DELETE WHERE (emp.commission IS NOT NULL)
..III..
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
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a D - USING − WHEN MATCHED THEN − WHEN NOT MATCHED THEN.
Para resolver esta questão, é necessário entender o comando MERGE utilizado no banco de dados Oracle, que é uma operação de atualização condicional de tabelas. Esse comando pode inserir, atualizar ou deletar registros em uma tabela alvo chamada de "destination table", com base na correspondência de registros em uma tabela fonte, conhecida como "source table". O comando é utilizado para sincronizar duas tabelas, mantendo a tabela alvo atualizada com as últimas informações da tabela fonte.
A instrução MERGE é geralmente estruturada em três partes principais:
- USING - Especifica a tabela fonte de dados.
- WHEN MATCHED THEN - Define as operações a serem realizadas quando um registro da tabela fonte encontra uma correspondência na tabela alvo.
- WHEN NOT MATCHED THEN - Define as operações a serem realizadas quando um registro da tabela fonte não encontra uma correspondência na tabela alvo.
No contexto da questão, o comando MERGE está sendo utilizado para realizar três operações:
- Atualizar o registro na tabela backup_employees caso exista um ID correspondente (employee_id) na tabela employees.
- Deletar o registro na tabela backup_employees se o campo commission não for nulo.
- Inserir um novo registro na tabela backup_employees se não houver uma correspondência encontrada.
Portanto, a sintaxe correta para o comando MERGE conforme requisitado na questão é:
- USING - Para especificar a seleção de dados da tabela fonte employees.
- WHEN MATCHED THEN - Para atualizar as colunas quando há correspondência de employee_id.
- WHEN NOT MATCHED THEN - Para inserir novos registros na tabela alvo caso não haja correspondência.
Essa estrutura assegura que todas as operações necessárias para sincronizar as tabelas serão executadas corretamente, seguindo as condições especificadas na instrução MERGE.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
LETRA D
MARGE
Realiza operações de inserção, atualização ou exclusão em uma tabela de destino com base nos resultados da junção com a tabela de origem. Por exemplo, você pode sincronizar duas tabelas inserindo, atualizando ou excluindo linhas em uma tabela com base nas diferenças encontradas na outra tabela.
BEGIN
SET NOCOUNT ON;
MERGE Production.UnitMeasure AS target
USING (SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
ON (target.UnitMeasureCode = source.UnitMeasureCode)
WHEN MATCHED THEN <-Ação quando os Registros coincidirem
UPDATE SET Name = source.Name
WHEN NOT MATCHED THEN <-Ação quando os Registros NÃO coincidirem
INSERT (UnitMeasureCode, Name) VALUES (source.UnitMeasureCode, source.Name)
OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable;
END;
GO
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo