TEMPORY TABLE X TABELA NORMAL

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
Lekich
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sex, 01 Jul 2005 2:54 pm
Localização: SP

Ola,

Tenho uma function que retorna um cursor, nessa function tenho que fazer vários calculos para isso pego varios dados de varias tabelas. Tenho que colocar tudo isso em uma tabela para que possa dar um SELECT para retornar o cursor. Não haverá commit nesta tabela ela é só para armazenar os dados enquanto a function esta processando. Para isso criei uma tabela normal com a estrutura que necessito e a utilizo conforme o exemplo abaixo. A pergunta é : vou ter ganho se criar esta tabela como TEMPORARY TABLE(...) ON COMMIT DELETE ROWS, se sim quais??? a solução que adotei envolve o risco de se dois ou mais usuarios acessarem a function ao mesmo tempo, os dados podem ficar misturados???

Selecionar tudo

package pktemp_2 is
TYPE tab_temp IS TABLE OF TabelaNormal%ROWTYPE;
function retorna_dados return tab_temp pipelined;
function CHAMA return RET_CURSOR.REF_CURSOR;
end;

function CHAMA return RET_CURSOR.REF_CURSOR
is
CRS_AAA RET_CURSOR.REF_CURSOR;
begin
   open crs_aaa for
   select * from table(pktemp_2.RETORNA_DADOS);
   return crs_aaa;
   close crs_aaa;
end CHAMA;
end pktemp_2;

function retorna_dados return tab_temp pipelined
is
e AGA.AGATBA01_GUICHE%ROWTYPE;
begin
   e.NU_GUICHE := 1;
   e.NU_UNIDADE := 1;
   pipe row(e);
   return;
end retorna_dados;

function CHAMA return AGA.AGAPC001_TIPOS.REF_CURSOR
is
CRS_AAA AGA.AGAPC001_TIPOS.REF_CURSOR;
begin
   open crs_aaa for
   select * from table(pktemp_2.RETORNA_DADOS);
   return crs_aaa;
   close crs_aaa;
end CHAMA;
end pktemp_2;
Ao executar Select * From Table(pktemp_2. CHAMA) from dual, os dados são retornados.

Obrigado,
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

Sim, vai ganhar performance, pois as Global Temporary Tables são super rápidas. (pelo fato do oracle não precisar ter toda consistencia em cima delas no caso do banco cair, ou outra coisa... Tipo, não faz redo-log, etc)...

Por esse motivo, vale a pena sim. E ainda não precisa se preocupar com problemas de 2 usuários acessarem ao mesmo tempo, pois cada um só enxergará as suas próprias informações.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 21 visitantes