Eu gostaria de criar uma tabela temporária em um banco de dados Oracle
algo como
Declare table @table (int id)
No servidor SQL
E então preencha-o com uma declaração selecionada
É possível?
obrigado
fonte
Eu gostaria de criar uma tabela temporária em um banco de dados Oracle
algo como
Declare table @table (int id)
No servidor SQL
E então preencha-o com uma declaração selecionada
É possível?
obrigado
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 diretamenteSELECT
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ãoDROP
) quando você encerra a sessão (ou no final da transação, dependendo de qual cláusula "ON COMMIT" você usa).fonte
DELETED
, nãoDROP
ped.fonte
ON COMMIT DELETE ROWS
significa que eles serão descartados mais cedo, se você fizer commit incrementalmente durante uma sessão.CRIAR TABELA table_temp_list_objects AS
SELECT o.owner, o.object_name FROM sys.all_objects o WHERE o.object_type = 'TABLE';
fonte