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:
- A)I;
Errada, porque a afirmativa I contraria o funcionamento da global temporary table, que nao compartilha os dados entre sessoes.
- B)II;
Certa, pois os dados inseridos em uma GTT sao mantidos apenas enquanto a sessao existe e desaparecem ao seu encerramento.
- C)I e II;
Errada, porque a afirmativa I esta incorreta e inviabiliza a combinacao com II.
- D)I e III;
Errada, pois a afirmativa I esta errada; somente III nao basta para essa alternativa.
- E)II e III.
Certa, porque em uma GTT com ON COMMIT DELETE ROWS os dados somem no commit e tambem ao final da sessao.
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.