← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

No contexto do Oracle, considere o comando a seguir e analise as afirmativas a respeito das consequências desse mesmo comando. create global temporary table temp ( a int not null primary key, b varchar(20) not null ) ON COMMIT DELETE ROWS; I. Dados inseridos numa sessão (em inglês, session) ficam disponíveis como read only para todas as sessões abertas. II. Dados inseridos por uma sessão são removidos quando a sessão é encerrada. III. Ao término de uma transação por meio de um comando commit, os dados são automaticamente removidos da tabela. Está correto somente o que se afirma em:

Gabarito: E

No Oracle, tabela temporária global nao significa dado compartilhado entre todo mundo. Ela é uma estrutura fisica criada no dicionario, mas os dados inseridos nela sao separados por sessão: cada sessao enxerga apenas o seu proprio conjunto de linhas. Por isso, nao existe essa ideia de os registros ficarem disponiveis como read only para todas as sessoes abertas. O ponto-chave aqui é o comando ON COMMIT DELETE ROWS. Ele faz com que, ao final de cada transacao com COMMIT, as linhas daquela sessao sejam apagadas automaticamente da GTT. Em outras palavras: terminou o commit, limpou a mesa. Se fosse ON COMMIT PRESERVE ROWS, os dados permaneceriam ate o fim da sessao. A afirmativa II também está correta porque os dados de uma global temporary table pertencem à sessao e desaparecem quando a sessao encerra. Isso é a ideia central das GTTs no Oracle: dados temporarios, visiveis só para a sessao que os gerou. Assim, o gabarito é E: a II e a III estao corretas. A I erra feio ao tratar dado de tabela temporaria como algo compartilhado e ainda por cima read only para todas as sessoes, o que nao corresponde ao comportamento da GTT no Oracle.

Continue treinando

Questões relacionadas