Criação de tabela temporaria no Oracle através de procedure

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Adriana Borges
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 27 Jul 2009 3:53 pm
Localização: Rio de Janeiro
Adriana Borges

Gente! estou tentando criara a procedure abaixo para criar uma tabela temporaria no oracle.
Estou utilizando o toad com o código abaixo e o mesmo me retorna o erro

Selecionar tudo

PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:
   begin declare exit for goto if loop mod null pragma raise
alguém pode me ajudar.... :D :D :D

Selecionar tudo

CREATE OR REPLACE PROCEDURE sp_tableTempComb IS 
BEGIN	

	CREATE TEMPORARY TABLE TEMP_COMBINACAO
	(
	  COD_PARCEIRO INTEGER,
	  COD_PLANO INTEGER,
	  COD_CAMPANHA_CAP INTEGER,
	  NUM_SERIE INTEGER,
	  FLD_DATA DATE,
	  NUM_COMBINACAO NUMBER,
	  VLR_TITULO_CAMPANHA FLOAT,
	  DATA_EXPORTACAO DATE,
	  VERSAO_ARQ_EXPORTACAO VARCHAR2(1),
	  DAT_EXT_SORTEIO DATE,
	  DAT_INI_VIGOR DATE,
	  DAT_SEGURO DATE
	)
	ON COMMIT DELETE ROWS;

End sp_tableTempComb;
/
rafaelfrocha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qua, 31 Out 2007 9:30 am
Localização: Uberlândia
Rafael Rocha

e se você usar dentro do seu procedure:

Selecionar tudo

execute immediate 
'CREATE GLOBAL TEMPORARY TABLE TEMP_COMBINACAO 
( 
COD_PARCEIRO INTEGER, 
COD_PLANO INTEGER, 
COD_CAMPANHA_CAP INTEGER, 
NUM_SERIE INTEGER, 
FLD_DATA DATE, 
NUM_COMBINACAO NUMBER, 
VLR_TITULO_CAMPANHA FLOAT, 
DATA_EXPORTACAO DATE, 
VERSAO_ARQ_EXPORTACAO VARCHAR2(1), 
DAT_EXT_SORTEIO DATE, 
DAT_INI_VIGOR DATE, 
DAT_SEGURO DATE 
) 
ON COMMIT DELETE ROWS';
Adriana Borges
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 27 Jul 2009 3:53 pm
Localização: Rio de Janeiro
Adriana Borges

Obrigada
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

A pergunta que não quer calar é:
Tem algum motivo especial pra criar uma tabela em tempo de execução ?
Adriana Borges
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 27 Jul 2009 3:53 pm
Localização: Rio de Janeiro
Adriana Borges

A intenção é popular a tabela temporária em tempo de execução apenas.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Não respondeu muito bem o porquê. Para a maioria dos propósitos dá para usar nested tables ou varrays, ou mesmo uma tabela "normal" documentada no modelo de dados. 8)
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Adriana,

um dia já tive o seu pensamento mas logo vi que estava errado... pensei que tabela temporaria era uma tabela de memoria ou coisa do tipo... e pensei em criar ela de forma dinamica e etc... mas logo que vi o erro, fui atras da informação e vi que, nada mais é do que um objeto de banco que trabalha mais rápida por não gerar archive, logs, etc...

crie sua tabela la no navigator executando o script, esqueca essa de criar em tempo de execução... depois de criada, você poderá trabalhar com ela normalmente, dando select, update, insert, etc... só lembrando das condições de ao comitar, guardas as linhas ou deletar as mesmas.
Lembrando que as informações ficam nessa tabela por sessão!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Ou cria uma GLOBAL TEMPORARY TABLE.
São extremamente rápidas, pois não geram redo log, archive, etc.
E toda informação fica visível apenas para a sessão que incluiu os dados. Não precisa se preocupar nem em excluir os dados!

Essa de criar tabela temporária em tempo de execução é uma grande furada neste caso.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Google Adsense [Bot] e 20 visitantes