A respeito dos mecanismos de triggers do Oracle, analise as afirmativas a seguir. I. A cláusula “OF nome_da_coluna” é usada para disparar o trigger somente quando a coluna específica tiver seu conteúdo alterado (updated). II. A cláusula “WHEN” pode ser aplicada somente para trigger no nível de linha (row level). III. A cláusula “REFERENCING OLD AS …” é aplicada somente para operações de inserção na tabela associada ao trigger. Está correto o que se afirma em
- A)I, somente.
Esta alternativa afirma que apenas a afirmativa I está correta. A ideia central de I está de acordo com os gatilhos Oracle do tipo UPDATE OF, que restringem o disparo às instruções que mencionem a coluna indicada na lista SET, e por isso o enunciado descreve corretamente o mecanismo. O problema é que a afirmativa II também está correta, então a alternativa deixa de refletir o conjunto real de proposições verdadeiras.
- B)I e II, somente.
Esta alternativa diz que as afirmativas I e II são as corretas. Em I, a cláusula OF nome_da_coluna funciona como filtro do UPDATE, fazendo o trigger responder apenas quando a coluna indicada é alvo da atualização; em II, a cláusula WHEN é mesmo restrita a triggers por linha, porque depende de valores de :OLD e :NEW. Como a afirmativa III erra ao dizer que REFERENCING OLD AS se aplica somente a inserções, esta é a combinação exata das proposições verdadeiras.
- C)I e III, somente.
Aqui se sustenta que I e III estariam corretas. A primeira parte procede, porque UPDATE OF coluna limita o acionamento do trigger às atualizações que envolvem a coluna listada, mas a terceira parte falha: OLD AS não é exclusivo de INSERT, já que OLD representa a imagem anterior da linha e é usado em operações de UPDATE e DELETE, não em inserção. Em INSERT, por definição, não existe valor antigo para ser referenciado.
- D)II e III, somente.
Esta opção afirma que II e III seriam as corretas. A afirmativa II realmente corresponde à regra do Oracle de que a cláusula WHEN só aparece em triggers row-level, com avaliação por linha e acesso a pseudorregistros como :OLD e :NEW. Porém III confunde o papel de REFERENCING OLD AS, porque essa sintaxe serve para renomear a referência à linha antiga em triggers adequados, e não apenas para operações de inserção, nas quais o OLD nem existe.
- E)I, II e III.
A alternativa diz que as três afirmativas estariam corretas. I e II estão alinhadas com o funcionamento do Oracle, mas III incorre em erro técnico ao restringir REFERENCING OLD AS a inserções, quando a imagem antiga da linha é justamente relevante em UPDATE e DELETE, e não em INSERT. Como a terceira proposição não se sustenta, não há como considerar o item completo como verdadeiro.
Gabarito: B
Em Oracle, triggers sao mecanismos que disparam automaticamente diante de eventos como INSERT, UPDATE ou DELETE. A ideia eh simples: aconteceu algo na tabela, o gatilho entra em acao. O detalhe que a banca gosta de cobrar fica nas clausulas, porque cada uma tem uma funcao bem especifica. A clausula OF nome_da_coluna aparece em triggers de UPDATE para restringir o disparo apenas quando aquela coluna for efetivamente alterada. Ou seja, se voce quer reagir so quando um campo especifico mudar, essa eh a porta certa. Por isso a afirmativa I esta correta. Ja a clausula WHEN e usada em triggers do nivel de linha, ou seja, row level. Ela serve para colocar uma condicao sobre os valores antigos e novos de cada linha afetada, o que faz sentido apenas quando o trigger enxerga cada registro individualmente. Logo, a afirmativa II tambem esta correta. A afirmativa III escorrega: a clausula REFERENCING OLD AS nao eh exclusiva de insercao. Em geral, OLD faz sentido quando existem valores antigos para comparar, como em UPDATE e DELETE. Em INSERT nao ha valor anterior da linha, entao a frase da questao esta errada. Resultado: gabarito B, com I e II corretas apenas.