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
  

Mensagemem Sáb, 02 Jul 2005 11:27 am

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???

Código: Selecionar todos
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,
Lekich
Localização: SP

Mensagemem Sex, 22 Jul 2005 2:20 pm

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.
dr_gori
Localização: Portland, OR USA

Thomas F. G

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


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


    Voltar para PL/SQL

    Quem está online

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