Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia....meu povo..
da uma luz ae....eu fiz esse cursor mas estou cruzando ele com uma tabela de 40 mil registros...enfim...
esta demorando muito o update....alguem pode me dar uma luz vê se eu fiz algo errado?
abraços
CREATE OR REPLACE procedure CONTESTACAO_PF.proc_atu_id_subs_cons_pf_ods is
reg number:=0;
total number:=0;
cursor c1
is
select rowid
from consolidado_contest_pf
where obs is null
and cod_servico in (select cod_servico
from dp_serv_contest
where id_servico not in (4,251,122))
and id_subs is null;
Begin
dbms_output.put_line(to_char(sysdate,'dd/mm/yyyy hh24:mi:ss'));
For r1 in c1
Loop
update consolidado_contest_pf
set id_subs = FUNC_SUBS_ODS(linha,to_char(data_do_servico,'yyyymm'))
where rowid = r1.rowid;
reg := reg+1;
If reg = 100
then
total := total+reg;
Commit;
Reg := 0;
dbms_output.put_line (total ||' Registros processados');
end if;
End Loop;
dbms_output.put_line(to_char(sysdate,'dd/mm/yyyy hh24:mi:ss'));
end;
/CREATE OR REPLACE function CONTESTACAO_PF.FUNC_SUBS_ODS(linha in number, dt_serv in number) return varchar2 IS
subscricao varchar2(20);
begin
dbms_output.put_line(linha||','||dt_serv);
select ods.cd_lnha
into subscricao
from integracao.odsdw_atvc_brta@dbl_callipr ods
where dt_serv = ods.ano_mes_rfrn
and ods.nr_tlfn = linha
and rownum = 1
order by cd_lnha desc;
return subscricao;
end;
Ta aii mottaaaaaaaa
1) Faça a explain plain dos selects
2) Veja que a function lê uma tabela de outro bd/schema (faz um dblink) isto pode tornar as coisas lentas , tente por um hint nesta query
/+first_rows index_asc(subscricao ??????)/
?????? nome do índice
3) Verifique se as estatísticas estão atualizadas, senão rode as mesmas.
4) As estatísticas estão atualizadas
5) O que faz a function FUNC_SUBS_ODS ? linha é coluna de consolidado_contest_pf ?