Questão FC369530
Observe a transação SQL a seguir. BEGIN; INSERT INTO Parte (ParteID, NomeParte) VALUES (1, 'Mariana Souza'); SAVEPOINT insercao; INSERT INTO Parte (ParteID, NomeParte) VALUES (2, '
Sistema de Gerenciamento de Banco de Dados (SGBD)
FGV · 2025
Observe a transação SQL a seguir.
BEGIN;
INSERT INTO Parte (ParteID, NomeParte)
VALUES (1, 'Mariana Souza');
SAVEPOINT insercao;
INSERT INTO Parte (ParteID, NomeParte)
VALUES (2, 'Joca Silva');
SAVEPOINT insercao;
INSERT INTO Parte (ParteID, NomeParte)
VALUES (3, 'Luiz Almeira');
ROLLBACK TO SAVEPOINT insercao;
RELEASE SAVEPOINT insercao;
ROLLBACK TO SAVEPOINT insercao;
SELECT * FROM Parte;
COMMIT;
No PostgreSQL, após a execução da transação SQL, o(s) registro(s) da tabela Parte é(são):
- (1, 'Mariana Souza')
- (2, 'Joca Silva')
- (3, 'Luiz Almeira')
- (1, 'Mariana Souza')
(2, 'Joca Silva')
- (2, 'Joca Silva')
(3, 'Luiz Almeira')
Mostrar resposta e comentário
Gabarito
A
Comentário do professor
Ao executar a transação, o que fica gravado é apenas (1, 'Mariana Souza').
Fluxo resumido: após o primeiro INSERT é criado o SAVEPOINT (estado A). Em seguida, cria-se outro SAVEPOINT com o mesmo nome depois do segundo INSERT (estado B) — o PostgreSQL permite empilhar savepoints com o mesmo identificador.
Depois do terceiro INSERT, o comando ROLLBACK TO SAVEPOINT retorna ao estado B, desfazendo apenas o terceiro INSERT. O RELEASE SAVEPOINT remove o savepoint mais recente (estado B). O seguinte ROLLBACK TO SAVEPOINT aplica-se então ao savepoint anterior (estado A), desfazendo o segundo INSERT.
Assim, antes do COMMIT resta somente o primeiro registro, que é então confirmado.
Conteúdo do catálogo FC Concursos · Atualizado em