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???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;
Select * From Table(pktemp_2. CHAMA) from dual
, os dados são retornados.Obrigado,