Questão nº 49
Questão de Tecnologia da Informação · FGV TJ-MS 2024 (nº 49)
Durante o desenvolvimento de um sistema de gestão de estoque para uma empresa de varejo, o desenvolvedor se depara com uma situação desafiadora. O sistema deve garantir que os produtos em estoque nunca tenham uma quantidade negativa, pois isso pode causar problemas sérios de integridade de dados e impactar as operações da empresa. No entanto, enquanto revisava o código do procedimento PL/SQL responsável por atualizar a quantidade de produtos em estoque após uma venda, o desenvolvedor percebeu que não havia tratamento de exceções para o caso em que a quantidade vendida fosse maior que a quantidade disponível em estoque. Diante dessa situação, o desenvolvedor precisa criar uma exceção específica, associá-la a um código de erro personalizado e garantir que o sistema use a nova exceção criada.
Para atingir esse objetivo, o desenvolvedor deverá:
- Adefinir uma variável do tipo EXCEPTION, associar um código de erro específico à exceção usando PRAGMA EXCEPTION_INIT e usar RAISE para lançar a exceção personalizada no procedimento PL/SQL; (alternativa correta)
- Butilizar uma declaração EXCEPTION para definir a exceção personalizada e associar um código de erro específico diretamente no RAISE, dentro do procedimento PL/SQL;
- Cutilizar uma declaração EXCEPTION para definir a exceção personalizada e lançar a exceção diretamente no procedimento PL/SQL, sem associar um código de erro específico;
- Dutilizar uma declaração EXCEPTION para definir a exceção personalizada e associar um código de erro específico usando PRAGMA EXCEPTION_INIT, mas não utilizar RAISE no procedimento PL/SQL;
- Eusar as exceções embutidas já fornecidas pelo Oracle, o que torna desnecessário criar uma exceção personalizada.
Resposta comentada
Gabarito Alternativa A
Uma exceção personalizada em PL/SQL é como um alarme específico que você cria para sinalizar uma condição de erro particular que não é coberta pelas exceções padrão do Oracle, geralmente relacionada a regras de negócio. Para usá-la, você declara a exceção, associa um código de erro único a ela e a dispara quando a condição de erro ocorre.
- (A) Correta: Para criar uma exceção específica e associá-la a um código de erro personalizado, o desenvolvedor deve primeiro declarar uma variável do tipo
EXCEPTION(ex:quantidade_insuficiente EXCEPTION;), em seguida, usarPRAGMA EXCEPTION_INITpara vincular essa exceção a um código de erro negativo personalizado (ex:PRAGMA EXCEPTION_INIT(quantidade_insuficiente, -20001);), e finalmente, usar a instruçãoRAISEpara lançar essa exceção nomeada quando a condição de erro for detectada no código. - (B) Incorreta: Embora seja possível usar
RAISE_APPLICATION_ERRORpara lançar um erro com um código personalizado, essa abordagem não define uma exceção nomeada que pode ser capturada diretamente pelo seu nome (WHEN minha_excecao THEN ...) dentro de um bloco PL/SQL, o que é o objetivo de "criar uma exceção específica" no contexto de PL/SQL. Armadilha da banca:RAISE_APPLICATION_ERRORcria um erro com código personalizado, o que pode parecer atender ao requisito, mas não cria uma exceção PL/SQL nomeada para ser capturada por nome. - (C) Incorreta: Lançar uma exceção personalizada sem associá-la a um código de erro específico via
PRAGMA EXCEPTION_INITnão permite que sistemas externos ou outros blocos PL/SQL identifiquem essa exceção de forma padronizada e robusta pelo seu código numérico. - (D) Incorreta: Associar um código de erro a uma exceção personalizada usando
PRAGMA EXCEPTION_INITé um passo necessário, mas se a instruçãoRAISEnão for utilizada, a exceção nunca será disparada e, portanto, o sistema não a "usará" para sinalizar o erro. - (E) Incorreta: As exceções embutidas do Oracle são para erros de banco de dados genéricos (ex:
NO_DATA_FOUND,TOO_MANY_ROWS). A situação descrita (quantidade vendida maior que a disponível) é uma regra de negócio específica que exige uma exceção personalizada para clareza, manutenção e tratamento adequado dentro do contexto da aplicação.
Fonte: FGV TJ-MS 2024 Técnico de Nível Superior - Analista de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.