Questão FC374563
Porém, um analista de banco de dados apontou um problema grave na implementação que poderá comprometer a consistência transacional do sistema. Com base na análise do código apresen
Linguagem SQL
Instituto Consulplan · 2025
Considere que a SEMCONGER implementou um procedimento armazenado (Stored Procedure) para atualizar valores de contratos públicos, garantindo, assim, maior controle sobre as transações no banco de dados.
A seguir está o código da Stored Procedure utilizada:
CREATE OR REPLACE PROCEDURE atualizar_valor_contrato(
p_id_contrato IN NUMBER,
p_novo_valor IN NUMBER
) AS
BEGIN
UPDATE contratos
SET valor = p_novo_valor
WHERE id = p_id_contrato;
COMMIT;
END atualizar_valor_contrato;
Porém, um analista de banco de dados apontou um problema grave na implementação que poderá comprometer a consistência transacional do sistema. Com base na análise do código apresentado, qual é a principal falha no procedimento armazenado?
- A falta de um ROLLBACK, após a execução do UPDATE, pode levar a inconsistências nos contratos.
- O uso de COMMIT, dentro da Stored Procedure, pode comprometer o controle transacional do sistema.
- O procedimento deveria utilizar uma subquery com SELECT para validar se o contrato existe antes de atualizar.
- O uso de IN NUMBER, como tipo dos parâmetros, pode causar erros em bancos de dados que utilizam tipos de dados dinâmicos.
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
O uso de COMMIT dentro de uma Stored Procedure quebra o controle transacional do chamador. Ao forçar o commit, a procedure decide o ponto de confirmação, impedindo que a sessão que a invocou faça um ROLLBACK global se precisar abortar uma operação maior.
Isso compromete a atomicidade e a consistência das transações: mudanças parciais podem ser confirmadas isoladamente, mesmo que outras ações relacionadas falhem posteriormente.
Além disso, um COMMIT interno pode confirmar alterações não relacionadas presentes na mesma transação da sessão, dificultando auditoria e recuperação.
Prática recomendada: remova o COMMIT da procedure e deixe o controle de transação (BEGIN/COMMIT/ROLLBACK) para o código chamador. Se for necessário um escopo independente, use explicitamente uma autonomous transaction com cuidado e documentação.
Conteúdo do catálogo FC Concursos · Atualizado em