Respostas:
Sim, o Oracle tem tabelas temporárias. Aqui está um link para um artigo do AskTom descrevendo-os e aqui está a documentação oficial do oracle CREATE TABLE.
No entanto, no Oracle, apenas os dados em uma tabela temporária são temporários. A mesa é um objeto regular visível para outras sessões. É uma má prática criar e eliminar tabelas temporárias no Oracle com frequência.
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
O Oracle 18c adicionou tabelas temporárias privadas, que são objetos na memória de sessão única. Veja a documentação para mais detalhes. As tabelas temporárias privadas podem ser criadas e eliminadas dinamicamente.
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
As tabelas temporárias podem ser úteis, mas costumam ser abusadas no Oracle. Muitas vezes, eles podem ser evitados combinando várias etapas em uma única instrução SQL usando visualizações sequenciais.
CREATE TABLE AS SELECT
: selecionar a partir de tabelas remotas com colunas LOB, já que você não pode diretamente SELECT
delas. Estou escrevendo um procedimento para copiar registros de um banco de dados remoto e esta foi minha solução: trazer os registros para um GTT e depois copiar para a tabela "real".
Só uma dica ... As tabelas temporárias no Oracle são diferentes do SQL Server. Você o cria UMA VEZ e apenas UMA VEZ, não em todas as sessões. As linhas que você insere são visíveis apenas para a sua sessão e são automaticamente excluídas (ou seja, TRUNCATE
não DROP
) quando você encerra a sessão (ou no final da transação, dependendo de qual cláusula "ON COMMIT" você usa).
DELETED
, não DROP
ped.
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
significa que eles serão descartados mais cedo, se você fizer commit incrementalmente durante uma sessão.