quarta-feira, 20 de julho de 2011

Tabelas Temporárias

Olá Pessoal .. Espero que estejam bem!!

Bom hoje e nas proxímas semanas  irei falar sobre um dos pricipais objetos de armazenamento do Oracle que são as tabelas.
Irei falar sobre os vários tipos , então fiquem atentos e acompanhem este e os Próximos Posts.

Uma tabela temporária só será proveitosa durante a permanência em uma  sessão ou a duração de uma  transação, ou seja, quando uma sessão ou transação se inicia ela esta vazia. Após varias operações de insert, update, delete nesta tabela quando um usuário se desconectar de sua sessão ou sua transação for efetivada os dados da tabela serão perdidos. Mas seus metadados ficarão armazenados no dicionário de dados para operações posteriores até que seja excluída definitivamente do Banco de Dados.
Irei mostrar dois exemplos de tabelas temporárias uma associada à transação e outra associada a uma sessão:

Exemplo 1 (Transação)

SQL> create global temporary table luciana.TEMP_PESSOA

(CPF number(11),

Nome varchar2(40),

data_nasci date);  

Table created.


SQL> insert into luciana.TEMP_PESSOA

values (27846888767,'LUIZ','09-MAY-11');   

1 row created.

SQL> select * from luciana.TEMP_PESSOA ;

       CPF NOME                                     DATA_NASC
---------- ---------------------------------------- ---------
27846888767 LUIZ                                    09-MAY-11

SQL> commit ;

Commit complete.


SQL> select * from luciana.TEMP_PESSOA ;

no rows selected

SQL> desc luciana.TEMP_PESSOA ;

Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CPF                                                NUMBER(11)
 NOME                                               VARCHAR2(40)
 DATA_NASCI                                         


Percebam que neste exemplo após criarmos a tabela e inserirmos dados na mesma, quando efetuamos uma transação (commit ou rollback) os dados da tabela são perdidos , mas sua estrutura continuará criada independente da desconexão do usuário até que seja dropada.

Exemplo 2 (Sessão)

SQL> create global temporary table luciana.TEMP_PESSOA2
(CPF number(11),
Nome varchar2(40),
data_nasci date) ON COMMIT PRESERVE ROWS;  

Table created.

SQL> insert into luciana.TEMP_PESSOA2
  2  values (27846888767,'LUIZ','09-MAY-11');

1 row created.

SQL> COMMIT ;

Commit complete.

SQL> select * from luciana.TEMP_PESSOA ;

       CPF NOME                                     DATA_NASC
---------- ---------------------------------------- ---------
27846888767 LUIZ                                    09-MAY-11

[oracle@localhost ~]$ sqlplus luciana/*****@orcl ;

SQL> select * from luciana.TEMP_PESSOA2 ;

no rows selected

SQL> desc luciana.TEMP_PESSOA2 ;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CPF                                                      NUMBER(11)
 NOME                                                   VARCHAR2(40)
 DATA_NASCI                                        DATE


Note que no segundo exemplo  na sintaxe de criação da tabela, utilizamos a cláusula ON COMMIT PRESERVE ROWS. Isto significa que após o término da transação os dados deverão ser mantidos independentemente da utilização de um (commit ou rollback) . Mas quando  desconectar-mos e reconectar-mos de novo os dados serão limpos e só poderemos visualizar a estrutura da tabela.

Oracle Quick Tip :

Após a criação das tabela temporária ela poderá ficar visível para todas as sessões,porém seus dados serão acessíveis somente pela sessão que os inclui.
Isso  é bom em relação aos locks pois eles não terão efeitos nesse tipo de tabela partindo do principio de que cada sessão tem acesso exclusivo a seus dados. Os dados serão criados na tablespace temporária do usuário e um comando TRUNCATE trunca somente os dados referentes à sua própria sessão.
Os utilitários EXPD e IMPD podem exportar e importar a estrutura de uma tabela temporária,menos os seus dados.Também podemos criar índices temporários para estas tabelas.
Além disto operações Rollback to Savepoint são suportadas mas caso ocorra uma falha no sistema os dados serão perdidos pois não existem logs gerados para as mesmas.
Podemos criar triggers e views que utilizem simultaneamente tabelas temporárias.

Para mais informações sobre tabelas Temporárias visitem os sites que usei como referência :


Muito Obrigada.

Um comentário:

  1. Olá Luciana !

    Já tinha lido sobre tabelas temporárias... Realmente o recurso é interessante!

    Boa dica !

    Sakamoto

    MyTraceLog - Registro de um DBA
    http://mytracelog.blogspot.com

    ResponderExcluir