Questão nº 36
Questão de Informática · FCC TRT6 2018 (nº 36)
Em um banco de dados PostgreSQL aberto e em condições ideais, um Analista especializado em Tecnologia da Informação executou as instruções abaixo em uma tabela chamada `funcionario`.
`BEGIN;`
`UPDATE funcionario SET salario = salario - 1000.00 WHERE nome = 'João';`
`SAVEPOINT ps1;`
`UPDATE funcionario SET salario = salario + 1000.00 WHERE nome = 'Paulo';`
I
`UPDATE salario SET salario = salario + 1000.00 WHERE nome = 'Marcos';`
`COMMIT;`
Na segunda instrução UPDATE, o Analista aumentou o salário do funcionário Paulo em 1000.00, quando deveria aumentar o salário do funcionário Marcos nesse valor. Para cancelar a operação realizada, a lacuna I deve ser preenchida pela instrução
- A`CANCEL OPERATION;`
- B`RESTORE TO ps1;`
- C`CANCEL UPDATE;`
- D`ROLLBACK -1;`
- E`ROLLBACK TO ps1;` (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Em bancos de dados, uma transação agrupa várias operações como uma unidade, garantindo que todas sejam bem-sucedidas ou nenhuma seja. Um SAVEPOINT (ponto de salvamento) permite marcar um ponto dentro de uma transação para que se possa reverter apenas as operações realizadas após esse ponto, sem cancelar a transação inteira.
(A) Incorreta: `CANCEL OPERATION;` não é um comando SQL padrão para controle de transações.
(B) Incorreta: `RESTORE TO ps1;` não é um comando SQL padrão para controle de transações; o comando correto para reverter a um savepoint é `ROLLBACK TO`.
(C) Incorreta: `CANCEL UPDATE;` não é um comando SQL padrão para controle de transações.
(D) Incorreta: `ROLLBACK -1;` não é uma sintaxe válida. Um `ROLLBACK` simples (sem `TO ps1`) reverteria toda a transação desde o `BEGIN;`, desfazendo também a alteração no salário de João, o que não é o objetivo. A armadilha aqui é usar um comando `ROLLBACK` que é válido, mas de forma incorreta ou com um efeito diferente do desejado (reverter tudo em vez de apenas parte).
(E) Correta: `ROLLBACK TO ps1;` é a instrução correta. Ela desfaz todas as operações realizadas após a definição do `SAVEPOINT ps1` (ou seja, o aumento do salário de Paulo), mas mantém as operações anteriores (a diminuição do salário de João). A transação permanece ativa, permitindo que o analista continue e finalize-a com `COMMIT` após a correção.
Fonte: FCC TRT6 2018 Analista Judiciário – Área Apoio Especializado – Especialidade Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.