Triggers são um importante recurso da linguagem SQL. Conside...
CREATE TRIGGER FAZ BEFORE UPDATE ON FUNCIONARIOS FOR EACH ROW DECLARE DIFERENCA NUMBER; BEGIN DIFERENCA := :NEW.SALARIO - :OLD.SALARIO; DBMS_OUTPUT.PUT_LINE(‘DIFERENÇA' || DIFERENCA); END;
Analise as assertivas abaixo e assinale a alternativa correta.
I. A trigger FAZ será executada uma única vez para toda execução do comando UPDATE. II. A trigger FAZ irá substituir a execução do comando UPDATE se a diferença calculada for nula. III. A trigger FAZ será executada antes da efetivação da operação de alteração de cada linha da tabela FUNCIONARIOS. IV. :OLD.SALARIO contém o valor do salário antes da efetivação da operação de alteração.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - Apenas III e IV estão corretas.
Para resolver essa questão é necessário compreender o conceito e o funcionamento das triggers (gatilhos) em SQL. Uma trigger é um procedimento armazenado que é automaticamente executado em resposta a determinados eventos na tabela ou vista de um banco de dados. Neste caso, estamos focando na trigger que é executada antes de um evento de atualização (UPDATE) em uma tabela.
A assertiva III está correta pois a trigger é definida com a opção BEFORE UPDATE ON FUNCIONARIOS, o que significa que ela será executada antes da operação de atualização ser efetivada em cada linha afetada pelo comando UPDATE. Isso permite que a trigger realize operações ou verificações antes que as alterações sejam de fato aplicadas à tabela.
A assertiva IV está correta pois no contexto das triggers, :OLD e :NEW são pseudoregistros que representam o estado da linha antes e depois da operação de UPDATE, respectivamente. Portanto, :OLD.SALARIO contém o valor do salário antes da alteração ser aplicada.
As assertivas I e II estão incorretas e não condizem com o comportamento das triggers em SQL:
- A assertiva I é incorreta porque a trigger é definida com a cláusula FOR EACH ROW, o que indica que ela será executada para cada linha afetada pelo comando UPDATE, não apenas uma única vez para toda a execução do comando.
- A assertiva II é incorreta porque a trigger não substitui a execução do comando UPDATE; ela simplesmente executa seu bloco de código antes que o UPDATE seja efetivamente realizado. Se a diferença calculada for nula, isso não afeta a execução do comando UPDATE, que continuará sua execução normal após a finalização da trigger.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo