Pular para o conteúdo principal

Questão de Banco de Dados — Oracle — FCC 2024

Banco de DadosOracle
Código
fc147215
Banca
FCC
Órgão
TRT 7
Ano
2024
Cargo
AJ TRT7
Após executar o comando Oracle TRUNCATE TABLE, um Analista decidiu desfazer a ação por meio de rollback. A ação foi
  1. Aineficaz, pois ele já havia dado commit na tabela objeto.
  2. Beficaz, após a execução de um drop realizado na tabela objeto.
  3. Cineficaz, pois esse comando não permite o rollback.
  4. Dineficaz, pois ele já havia atualizado a tabela objeto.
  5. Eeficaz, após a execução de um alter realizado na tabela objeto.
Revelar gabarito e comentário

GabaritoC — ineficaz, pois esse comando não permite o rollback.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Oracle: TRUNCATE TABLE e rollback

Gabarito: letra C. O comando TRUNCATE TABLE é um comando DDL (Data Definition Language) no Oracle e, por isso, não pode ser desfeito por ROLLBACK. Diferente dos comandos DML (INSERT, UPDATE, DELETE), que são transacionais e podem ser revertidos, o TRUNCATE realiza uma operação de exclusão definitiva de todas as linhas da tabela, liberando o espaço alocado, sem gerar registros de undo que permitam a reversão.

O TRUNCATE TABLE é um comando que remove todas as linhas de uma tabela de forma rápida e definitiva. Ele é classificado como um comando DDL, assim como CREATE, ALTER e DROP. A principal característica dos comandos DDL é que eles são não transacionais — ou seja, não podem ser executados dentro de uma transação e, portanto, não podem ser desfeitos com ROLLBACK. Isso acontece porque o TRUNCATE não gera informações de undo (dados necessários para reverter a operação), ao contrário do DELETE, que é um comando DML e pode ser revertido se executado dentro de uma transação.

Para entender melhor, é importante diferenciar os comandos:

Característica

TRUNCATE (DDL)

DELETE (DML)

Tipo de comando

DDL

DML

Pode ser revertido com ROLLBACK?

Não

Sim (se não houve COMMIT)

Gera registros de undo?

Não

Sim

Remove linhas

Todas

Pode remover todas ou um subconjunto (com WHERE)

Velocidade

Muito rápida

Mais lenta (gera undo e redo)

Disparo de triggers

Não dispara

Dispara

Libera espaço da tabela

Sim

Não (apenas marca como deletado)

A pegadinha da questão está em confundir TRUNCATE com comandos DML. O candidato que sabe que DELETE pode ser revertido com ROLLBACK pode erroneamente pensar que TRUNCATE também pode. No entanto, a natureza DDL do TRUNCATE o torna irreversível. O COMMIT não tem relação com a possibilidade de rollback do TRUNCATE — mesmo que o TRUNCATE seja executado sem um COMMIT explícito, ele já é efetivado imediatamente e não pode ser desfeito. Da mesma forma, executar DROP ou ALTER na tabela não torna o TRUNCATE reversível; essas operações são igualmente DDL e não têm efeito sobre a irreversibilidade do TRUNCATE.

Na prática, se um analista executar TRUNCATE TABLE e depois tentar ROLLBACK, o comando ROLLBACK será ineficaz — a ação não será desfeita. O ROLLBACK só funciona para reverter comandos DML que ainda não foram commitados. Como o TRUNCATE é um comando DDL, ele é efetivado automaticamente, sem necessidade de COMMIT, e não pode ser revertido.

Guarde essa distinção fundamental: comandos DDL são não transacionais e irreversíveis; comandos DML são transacionais e reversíveis até o COMMIT. É exatamente essa fronteira que as alternativas exploram.

Alternativa A — ❌ Incorreta

Afirma que a ação foi ineficaz porque o analista já havia dado COMMIT na tabela. O erro está em atribuir a irreversibilidade ao COMMIT. O TRUNCATE é irreversível por ser um comando DDL, independentemente de qualquer COMMIT. Mesmo que o COMMIT não tivesse sido executado, o ROLLBACK não desfaria o TRUNCATE.

Alternativa B — ❌ Incorreta

Afirma que a ação foi eficaz após a execução de um DROP na tabela. O DROP é um comando DDL que remove a tabela inteira, e não tem qualquer relação com a reversibilidade do TRUNCATE. Executar DROP não torna o ROLLBACK eficaz; pelo contrário, DROP também é irreversível.

Alternativa C — ✅ Correta ⟵ GABARITO

Afirma que a ação foi ineficaz porque o comando TRUNCATE não permite rollback. Esta é a afirmação correta. O TRUNCATE é um comando DDL, não transacional, e não pode ser revertido com ROLLBACK. O ROLLBACK só é eficaz para comandos DML (INSERT, UPDATE, DELETE) que ainda não foram commitados.

Alternativa D — ❌ Incorreta

Afirma que a ação foi ineficaz porque o analista já havia atualizado a tabela. O erro está em atribuir a irreversibilidade a uma atualização prévia. O TRUNCATE é irreversível por sua natureza DDL, independentemente de qualquer atualização anterior na tabela.

Alternativa E — ❌ Incorreta

Afirma que a ação foi eficaz após a execução de um ALTER na tabela. O ALTER é um comando DDL que modifica a estrutura da tabela, e não tem qualquer relação com a reversibilidade do TRUNCATE. Executar ALTER não torna o ROLLBACK eficaz; ALTER também é irreversível.

NÃO CAIA NESSA!

A banca explora a confusão entre comandos DDL e DML. O candidato que sabe que DELETE (DML) pode ser revertido com ROLLBACK pode erroneamente pensar que TRUNCATE (DDL) também pode. Lembre-se: TRUNCATE é DDL, não transacional, e irreversível. As alternativas B e E tentam induzir o erro ao sugerir que outros comandos DDL (DROP, ALTER) poderiam tornar o rollback eficaz, o que é um absurdo — eles também são irreversíveis.

PEGA ESSA DICA!

Para fixar, memorize a classificação dos comandos SQL: DDL (CREATE, ALTER, DROP, TRUNCATE) — não transacionais, irreversíveis; DML (INSERT, UPDATE, DELETE, MERGE) — transacionais, reversíveis até o COMMIT; DCL (GRANT, REVOKE) — controle de acesso; TCL (COMMIT, ROLLBACK, SAVEPOINT) — controle de transações. Na prova, ao ver TRUNCATE, lembre-se imediatamente: "DDL, não dá rollback".

Gabarito: letra C

Link permanente: /questoes/fc147215