Questão nº 85
Questão de Auditoria em Tecnologia da Informação · FCC Prefeitura de São Luís 2018 (nº 85)
Um Auditor digitou em um banco de dados Oracle, aberto e em condições ideais, a instrução PL/SQL:
`SELECT id, nome FROM cidadao WHERE id = '001' FOR UPDATE ORDER BY id;`
A cláusula `FOR UPDATE`
- Aindica que todos os cidadãos que possuem o valor 001 no campo `id` poderão ter os dados modificados por qualquer usuário do banco de dados.
- Baltera o valor do campo `id` do registro selecionado para 001, independentemente do valor existente nesse campo.
- Cindica apenas que o Auditor está selecionando o cidadão que possui valor 001 no campo `id` para executar uma operação de alteração nos dados.
- Dbloqueia as linhas na tabela `cidadao` onde o valor do campo `id` é 001 para que somente o Auditor possa alterar. O bloqueio será liberado apenas depois da emissão de uma instrução `ROLLBACK` ou `COMMIT`. (alternativa correta)
- Eindica que os registros que possuem o valor 001 no campo `id` serão transferidos para a área de transferência do banco de dados onde poderão ser executadas operações de alteração de dados.
Resposta comentada
Gabarito Alternativa D
A cláusula FOR UPDATE em um SELECT é usada para bloquear as linhas que a consulta encontra, garantindo que nenhum outro usuário possa modificá-las enquanto a sua transação estiver ativa. Isso serve para "reservar" essas linhas para uma futura alteração que você planeja fazer.
- (A) Incorreta: A cláusula
FOR UPDATEfaz exatamente o oposto: ela bloqueia as linhas para que apenas o usuário atual possa alterá-las, impedindo que outros usuários as modifiquem. - (B) Incorreta: A instrução
SELECT ... FOR UPDATEé uma consulta de seleção e bloqueio, ela não altera nenhum valor no banco de dados. Para alterar, seria necessário umUPDATEexplícito. - (C) Incorreta: Esta alternativa descreve a intenção do Auditor, que é preparar-se para uma alteração. No entanto, a cláusula
FOR UPDATEnão "indica apenas"; ela executa um bloqueio real nas linhas. A armadilha aqui é que a intenção está correta, mas a descrição do mecanismo da cláusula é incompleta e minimiza seu efeito prático. A cláusulaFOR UPDATEgarante, através de um bloqueio, que a alteração possa ser feita sem conflitos de concorrência. - (D) Correta: Esta alternativa descreve com precisão o comportamento da cláusula
FOR UPDATE. Ela bloqueia as linhas selecionadas, impedindo que outros usuários as modifiquem. Esse bloqueio é mantido até que a transação seja finalizada, seja por umCOMMIT(confirmando as alterações) ou por umROLLBACK(desfazendo-as). - (E) Incorreta: Não existe uma "área de transferência do banco de dados" com essa finalidade. Os dados são lidos para a memória da sessão do usuário, mas a função principal de
FOR UPDATEé gerenciar o bloqueio no próprio banco de dados para garantir a integridade e evitar problemas de concorrência.
Fonte: FCC Prefeitura de São Luís 2018 Auditor Fiscal de Tributos I - Área Tecnologia da Informação (TI) (Caderno Tipo 001). Reproduzida para fins de estudo.