performance pl/sql

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
snowblacksoul
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 25 Nov 2009 9:34 am
Localização: sp
snowblacksoul@hotmail.com
analista de suporte

Ola galera tudo bem?!
Espero que sim, pessoal estou com uma missao crítica.
passaram um script para rodar no banco, só que esse script está ruim de mais, deixando o banco lento e também a demora de rodar esse script, vi alguns exemplos de bulk collection, gostaria de usar de update, tentei uma vez , mas não conseguir fazer o update, alguém poderia me ajudar nisso!
aqui esta uma parte do script aliás a mais importante que é o update

grato a todos que puderem ajudar!!

Selecionar tudo

DECLARE
BEGIN

   FOR reg IN (SELECT a.rowid, 
                      b.nrc,
                      b.id_status_pc,
                      b.id_status_conta,
                      b.id_localidade,
                      b.terminal,
                      b.cod_subtp_produto_comercial,
                      b.dt_ins_prqe,
                      b.in_stop_faturamento,
                      b.seg_cnta
                  FROM fat_20100924_20100824_tmp a,
                       parque_contratado_20100824 b
                 WHERE a.flag_atis IS NOT NULL
                   AND NVL(a.sis_ant,a.sis_atu) = b.sistema
                   AND a.produto_comercial = b.produto_comercial
                   AND b.dt_ini_cnta = (SELECT MAX(c.dt_ini_cnta)
                                          FROM parque_contratado_20100824 c
                                         WHERE c.produto_comercial = b.produto_comercial
                                           AND b.sistema = c.sistema))
   LOOP
   
      UPDATE fat_20100924_20100824_tmp a
         SET a.nrc = reg.nrc,
             a.id_status_pc_ant = reg.id_status_pc,
             a.id_status_conta_ant = reg.id_status_conta,
             a.id_localidade_ant = reg.id_localidade,
             a.terminal = reg.terminal,
             a.classe_ant = reg.cod_subtp_produto_comercial,
             a.cod_subtp_prod_com_ant = reg.cod_subtp_produto_comercial,
             a.dt_ins_prqe_ant = reg.dt_ins_prqe,
             a.in_stop_fat_ant = reg.in_stop_faturamento,
             a.seg_ant = NVL(a.seg_ant,reg.seg_cnta)
       WHERE a.rowid = reg.rowid;
   
   END LOOP;    
   
   COMMIT;
             
END;
/
ballboas
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 99
Registrado em: Qui, 02 Ago 2007 3:06 pm
Localização: sp
Érico Balboa

A pergunta mais cretina é aquela que não é feita

Esta tabela de busca tem os índices necessários??
snowblacksoul
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 25 Nov 2009 9:34 am
Localização: sp
snowblacksoul@hotmail.com
analista de suporte

Ola amigo sim ela tem os indices!!!
que é o NRC
ballboas
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 99
Registrado em: Qui, 02 Ago 2007 3:06 pm
Localização: sp
Érico Balboa

A pergunta mais cretina é aquela que não é feita

Mas você não usa ela como busca, somente no update.

Se você rodar este select separado ele demora tb??

Acredito q você tenha um ambiente de Teste ai, tente criar um índice para sistema e produto comercial e analise a performance desta consulta com estes índices e, claro, veja com o DBA qual é o impacto da criação deste índice.
snowblacksoul
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 25 Nov 2009 9:34 am
Localização: sp
snowblacksoul@hotmail.com
analista de suporte

Aqui é osso grande não tem ambiente de teste não é na produção mesmo,então tem os indices e tudo mais continua muito lento, gostaria de usar o bulk collection mesmo!! pois vi algumas mudanças nos exemplos que vi, mas não sei como colocar nesse update
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante