Triggers são um importante recurso da linguagem SQL. Conside...

Próximas questões
Com base no mesmo assunto
Q2172651 Banco de Dados
Triggers são um importante recurso da linguagem SQL. Considere o seguinte comando para criação de uma trigger:
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.
Alternativas

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