A instrução DECLARE GLOBAL TEMPORARY TABLE define uma tabela temporária para a conexão corrente. Estas tabelas não residem nos catálogos do sistema, e não são persistentes. As tabelas temporárias existem somente durante a conexão em que foram declaradas, não podendo ser referenciadas de fora da conexão. Ao fechar a conexão, as linhas da tabela são excluídas e a descrição em-memória da tabela temporária é removida.
DECLARE GLOBAL TEMPORARY TABLE nome-da-tabela { definição-da-coluna [ , definição-da-coluna ] * } [ ON COMMIT {DELETE | PRESERVE} ROWS ] NOT LOGGED [ON ROLLBACK DELETE ROWS]
O nome da tabela temporária. Se for especificado um nome-do-esquema diferente de SESSION, ocorrerá um erro (SQLState 428EK). Se o nome-do-esquema não for especificado, será atribuído SESSION. Várias conexões podem definir tabelas temporárias globais declaradas com o mesmo nome, porque cada conexão possui seu próprio descritor de tabela único.
A utilização de SESSION como nome do esquema de uma tabela física não gera erro, mas é desestimulado. O nome de esquema SESSION deve ser reservado para o esquema de tabelas temporárias.
Para obter mais informações sobre a definição-da-coluna deve ser consultada definição-da-coluna em CREATE TABLE. A instrução DECLARE GLOBAL TEMPORARY TABLE não permite especificação-de-coluna-gerada na definição-da-coluna.
Especifica a ação a ser executada na tabela temporária global quando é realizada uma operação de COMMIT.
Todas as linhas da tabela serão excluídas, se não houver nenhum cursor com possibilidade de HOLD aberto na tabela. Este é o valor padrão para ON COMMIT. Se for especificado ON ROLLBACK DELETE ROWS, serão excluídas todas as linhas da tabela somente se a tabela temporária tiver sido utilizada. ON COMMIT DELETE ROWS exclui as linhas da tabela, mesmo que a tabela não tenha sido utilizada (se a tabela não possuir nenhum cursor com possibilidade de HOLD aberto na mesma).
As linhas da tabela são preservadas.
Especifica a ação realizada na tabela temporária global quando uma operação de desfazer é realizada. Quando é realizada uma operação de ROLLBACK (ou ROLLBACK TO SAVEPOINT), se a tabela foi criada na unidade de trabalho (ou no ponto de salvamento), a tabela será removida. Se a tabela foi removida na unidade de trabalho (ou no ponto de salvamento), a tabela será restaurada sem nenhuma linha.
Este é o valor padrão para NOT LOGGED. NOT LOGGED [ON ROLLBACK DELETE ROWS ]] especifica a ação a ser realizada na tabela temporária global quando é realizada uma operação de ROLLBACK (ou ROLLBACK TO SAVEPOINT). Se os dados da tabela foram modificados, todas as linhas serão excluídas.
SET SCHEMA MYAPP; CREATE TABLE T1(C11 INT, C12 DATE); DECLARE GLOBAL TEMPORARY TABLE SESSION.T1(C11 INT) NOT LOGGED; -- A qualificação SESSION é redundante, porque as tabelas temporárias -- somente podem existir no esquema SESSION. DECLARE GLOBAL TEMPORARY TABLE T2(C21 INT) NOT LOGGED; -- A tabela temporária não é qualificada neste caso com SESSION, porque -- as tabelas temporárias somente podem existir no esquema SESSION. INSERT INTO SESSION.T1 VALUES (1); -- Neste caso a qualificação SESSION é obrigatória para utilizar a -- tabela temporária, porque o esquema corrente é MYAPP. SELECT * FROM T1; -- Esta instrução SELECT está fazendo referência à tabela física -- "MYAPP.T1", uma vez que a tabela não foi qualificada com SESSION.
Deve ser observado que as tabelas temporárias somente podem ser declaradas no esquema SESSION. Nunca deve ser declarado um esquema físico com o nome SESSION.
As tabelas temporárias não pode ser especificadas nas restrições referenciais.
Não há suporte para restrição de verificação nas colunas.
As tabelas temporárias não podem ser referenciadas por uma instrução-SQL-engatilhada.
Se uma instrução realizando uma inserção, atualização ou exclusão em uma tabela temporária encontrar um erro, todas as linhas da tabela serão excluídas.
O Derby não dá suporte em tabelas temporárias a:
As instruções fazendo referência a tabelas e visões no esquema SESSION não ficam no cache.