Questão nº 54
Questão de Tecnologias da Informação · FCC SEFAZ-SC 2018 - Conhecimentos Específicos (P3) (nº 54)
Em um Oracle Database, um profissional de TI deseja criar uma trigger chamada `Atualiza_salario_func`, com o objetivo de exibir as diferenças entre o novo (`NEW.salarioFunc`) e o antigo salário (`OLD.salarioFunc`) constantes da tabela de funcionários. Para tanto, ele escreveu o seguinte código:
```
CREATE TRIGGER Atualiza_salario_func
BEFORE I ON II
FOR EACH ROW
WHEN (NEW.CODFUNC > 0)
DECLARE
diferenca_salario number;
BEGIN
diferenca_salario := :NEW.salarioFunc - :OLD.salarioFunc;
dbms_output.put('Salário antigo:' || :OLD.salarioFunc);
dbms_output.put('Salário novo:' || :NEW.salarioFunc);
dbms_output.put_line(' A diferença de salário foi de: ' || diferenca_salario);
END;
/
```
As lacunas I e II devem especificar, correta e respectivamente, os elementos genéricos
- A`condition` e `database_name`.
- B`triggering_event` e `column_name`.
- C`column_event` e `table_name`.
- D`row_event` e `column_name`.
- E`triggering_event` e `table_name`. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Um trigger (gatilho) em Oracle é um código PL/SQL que executa automaticamente (dispara) quando um evento específico (como `INSERT`, `UPDATE` ou `DELETE`) ocorre em uma tabela ou view. Ele é definido para rodar antes ou depois desse evento e na tabela onde o evento acontece.
(A) Incorreta: `condition` se refere à cláusula `WHEN` do trigger, não ao tipo de evento. `database_name` é incorreto, pois triggers operam em tabelas dentro de um banco de dados, não no banco de dados em si.
(B) Incorreta: `triggering_event` é correto para `I` (o tipo de ação que dispara o trigger, como `UPDATE`). No entanto, `column_name` é incorreto para `II`. A armadilha aqui é que, embora o trigger possa ser acionado por uma mudança em uma coluna específica (como `salarioFunc`), a cláusula `ON` sempre especifica a tabela onde essa coluna reside. A sintaxe correta é `ON table_name`.
(C) Incorreta: `column_event` não é um termo padrão para o tipo de evento que dispara um trigger. `table_name` é correto para `II`, mas `column_event` não é para `I`.
(D) Incorreta: `row_event` não é um termo padrão para o tipo de evento. `column_name` é incorreto para `II`.
(E) Correta: `triggering_event` (como `INSERT`, `UPDATE`, `DELETE`) é o que preenche a lacuna `I`, indicando qual ação na tabela fará o trigger disparar. A lógica do trigger, que compara `:NEW.salarioFunc` com `:OLD.salarioFunc`, sugere fortemente que o `triggering_event` seja um `UPDATE`. `table_name` é o que preenche a lacuna `II`, pois o trigger sempre é definido `ON` uma tabela específica onde o evento ocorre.
Fonte: FCC SEFAZ-SC 2018 - Conhecimentos Específicos (P3) Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.