Questão de Banco de Dados — SQL — FGV 2024
- Código
- fg077077
- Banca
- FGV
- Órgão
- CGM de Belo Horizonte - MG
- Ano
- 2024
- Nível
- Superior
- Cargo
- Auditor Interno - Ciência da Computação - Manhã
- AV – V – F.
- BV – F – V.
- CF – V – F.
- DF – F – V.
GabaritoC — F – V – F.
Gabarito: letra C — F, V, F. A primeira afirmativa é falsa porque triggers em tabelas/visões respondem a eventos DML (INSERT, UPDATE, DELETE), não DDL, e o termo "transição cruzada" não é um tipo reconhecido. A segunda é verdadeira: triggers condicionais (DML ou de sistema) podem usar a cláusula WHEN para avaliar condições por linha. A terceira é falsa: triggers executam na mesma transação do evento, sem prioridade sobre instruções SQL independentes.
A banca testa a diferenciação entre tipos de trigger (DML, DDL, sistema) e o funcionamento de condicionais. O material de apoio confirma que triggers em tabelas são DML; já triggers DDL são ligados ao banco/esquema.
A afirmativa alega que triggers criados em tabela ou visão têm evento composto por instruções DDL e são chamados de "trigger de transição cruzada”. Há dois erros: (1) triggers em tabelas/visões são acionados por comandos DML (INSERT, UPDATE, DELETE), não DDL; (2) não existe no Oracle o tipo "trigger de transição cruzada". Eventos DDL (CREATE, ALTER, DROP) disparam triggers DDL, mas estes não estão associados a uma tabela/visão específica.
Um trigger condicional é aquele que possui uma cláusula WHEN, a qual especifica uma condição SQL avaliada para cada linha afetada (no caso de triggers DML row-level) ou para o evento (no caso de triggers de sistema). Embora a cláusula WHEN seja mais comum em triggers DML row-level, a documentação do Oracle também a permite em alguns triggers de sistema (ex.: CREATE antes de certos eventos). Assim, a afirmativa está correta no contexto geral.
Triggers executam dentro da mesma transação que originou o evento; eles não têm qualquer prioridade sobre instruções SQL independentes. A afirmação de que "as instruções SQL executadas com prioridade" é incorreta. As operações do trigger seguem o mesmo isolamento transacional e não são privilegiadas.
A sequência V-V-F coloca a primeira afirmativa como verdadeira, quando na realidade é falsa (trigger de tabela não é DDL). Portanto, incorreta.
Erra ao considerar a primeira verdadeira e a terceira verdadeira. A primeira é falsa (já explicado) e a terceira também é falsa (não há prioridade).
Sequência que reflete corretamente a realidade: primeira falsa, segunda verdadeira, terceira falsa.
Erra ao considerar a segunda afirmativa falsa e a terceira verdadeira. A segunda é verdadeira (condicional com WHEN é válido) e a terceira é falsa.
A banca troca DML por DDL na primeira afirmativa e inventa o termo "transição cruzada" — nome que não existe na documentação Oracle. Na terceira, insere a ideia de "prioridade" que não procede. Lembre-se: triggers em tabelas são DML; DDL triggers são a nível de banco/esquema. A execução é sempre na mesma transação.
Conclusão: A sequência correta é F, V, F, portanto o gabarito é a letra C.
Link permanente: /questoes/fg077077