Questão de Banco de Dados — Oracle — CESPE / CEBRASPE 2025
- Código
- ce417227
- Banca
- CESPE / CEBRASPE
- Órgão
- PC DF
- Ano
- 2025
- Cargo
- GAAPC ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: Certo. No Oracle, gatilhos (triggers) podem sim invocar procedimentos armazenados (stored procedures) — essa é uma capacidade nativa da linguagem PL/SQL, que permite que o corpo do gatilho execute chamadas a procedures e functions. A afirmação está correta.
Um gatilho é um programa armazenado no banco de dados que é executado automaticamente em resposta a determinados eventos, como comandos DML (INSERT, UPDATE, DELETE), DDL (CREATE, ALTER, DROP) ou eventos de sistema (LOGON, LOGOFF, STARTUP, SHUTDOWN). No Oracle, os gatilhos são escritos em PL/SQL, e o bloco de ação do gatilho pode conter qualquer instrução PL/SQL válida — inclusive chamadas a procedimentos armazenados. Isso é amplamente utilizado para centralizar regras de negócio: o gatilho dispara e delega a lógica mais complexa a uma procedure, que pode ser reutilizada em outros contextos.
A confusão clássica neste tema é inverter a relação: o gatilho não é invocado por um procedimento — ele é disparado por um evento. Mas o gatilho pode invocar procedimentos. Ou seja, a direção da chamada é do gatilho para a procedure, e não o contrário. A banca explora exatamente essa inversão em itens como "procedimentos armazenados podem invocar gatilhos", o que seria incorreto.
Na prática, um exemplo típico: um gatilho AFTER INSERT em uma tabela de vendas pode chamar uma procedure ATUALIZA_ESTOQUE para dar baixa no estoque. O gatilho é o ponto de entrada automático; a procedure encapsula a lógica de atualização. Isso mantém o código organizado e evita duplicação.
Portanto, a assertiva está certa: no Oracle, gatilhos podem invocar procedimentos armazenados.
A afirmação é verdadeira. No Oracle, o corpo de um gatilho é um bloco PL/SQL, e dentro desse bloco é perfeitamente válido executar uma chamada a um procedimento armazenado (stored procedure) ou a uma função. A sintaxe do gatilho permite que a seção de ação (BEGIN...END) contenha qualquer instrução PL/SQL, incluindo procedure_name(argumentos);. Isso é um recurso documentado e amplamente utilizado.
O que não é possível é o inverso: um procedimento armazenado não pode "invocar" um gatilho diretamente — o gatilho só é disparado por um evento definido em sua criação. Mas a pergunta foi precisa ao afirmar que o gatilho pode invocar procedimentos, o que está correto.
Para fixar: gatilho → dispara automaticamente por evento → pode chamar procedure. A pegadinha da banca é inverter: "procedure invoca gatilho" — isso é falso. Guarde a direção da chamada.
Gabarito: Certo
Link permanente: /questoes/ce417227