Instru????o DECLARE GLOBAL TEMPORARY TABLE

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.

As tabelas tempor??rias s??o ??teis quando:
  • a estrutura da tabela n??o ?? conhecida antes de utilizar o aplicativo.
  • os outros usu??rios n??o necessitam da mesma estrutura de tabela.
  • os dados da tabela tempor??ria s??o necess??rios durante o uso do aplicativo.
  • a tabela pode ser declarada e removida sem manter bloqueios no cat??logo do sistema.

Sintaxe

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]
 

nome-da-tabela

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.

defini????o-da-coluna

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.

Tipo-de-dado

Os tipos-de-dado suportados s??o:
  • BIGINT
  • CHAR
  • DATE
  • DECIMAL
  • DOUBLE PRECISION
  • FLOAT
  • INTEGER
  • NUMERIC
  • REAL
  • SMALLINT
  • TIME
  • TIMESTAMP
  • VARCHAR

ON COMMIT

Especifica a a????o a ser executada na tabela tempor??ria global quando ?? realizada uma opera????o de COMMIT.

DELETE ROWS

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).

PRESERVE ROWS

As linhas da tabela s??o preservadas.

NOT LOGGED

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.

ON ROLLBACK DELETE ROWS

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.

Exemplos

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.

A seguir est?? mostrada uma lista de fun????es da instru????o DECLARE GLOBAL TEMPORARY TABLE do DB2 UDB que n??o s??o suportadas pelo Derby:
  • IDENTITY op????es-de-coluna
  • IDENTITY atributo nas op????es-de-c??pia
  • AS (FULLSELECT) DEFINITION ONLY
  • NOT LOGGED ON ROLLBACK PRESERVE ROWS
  • IN nome-do-espa??o-de-tabelas
  • PARTITIONING KEY
  • WITH REPLACE

Restri????es das tabelas tempor??rias globais declaradas

As tabelas tempor??rias n??o podem ser especificadas nas seguintes instru????es:
  • ALTER TABLE
  • CREATE SYNONYM
  • CREATE TRIGGER
  • CREATE VIEW
  • LOCK
  • RENAME

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.

N??o podem ser utilizados os seguintes tipos de dado nas tabelas tempor??rias globais declaradas:
  • BLOB
  • CLOB
  • LONG VARCHAR

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.

Restri????es espec??ficas do Derby

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.

Conceitos relacionados
Intera????o com o sistema de depend??ncias
Instru????es CREATE
Instru????es DROP
Instru????es RENAME
Instru????es SET
Refer??ncias relacionadas
Instru????o ALTER TABLE
CALL (PROCEDIMENTO)
Cl??usula CONSTRAINT
Instru????o DELETE
Cl??usula FOR UPDATE
Cl??usula FROM
Cl??usula GROUP BY
Cl??usula HAVING
INNER JOIN
Instru????o INSERT
Opera????o JOIN
LEFT OUTER JOIN
Instru????o LOCK TABLE
Cl??usula ORDER BY
Consulta
RIGHT OUTER JOIN
SubconsultaEscalar
Express??oSele????o
Instru????o SELECT
Express??oTabela
SubconsultaTabela
Instru????o UPDATE
VALUES Express??o
Cl??usula WHERE
Cl??usula WHERE CURRENT OF