Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Divi

Procedure Demorando

Recommended Posts

Boa tarde a todos.

 

 

sou novo no forum e estou com uma duvida, se alguem puder me ajudar.

 

 

 

tenho esta procedure e quando rodo ela. demora uns 20 ou mais minutos para rodar.

 

alguma maneira de deixar ela rodando mais rapido?

 

 

 

desde ja agradeço a atenção de todos.

 

 

 

 

CREATE OR REPLACE
PROCEDURE atualiza_cadastros (var_cnpj IN VARCHAR2)
IS
vcli NUMBER;
vrca VARCHAR2 (130);
vsup VARCHAR2 (130);
vdia VARCHAR2 (130);
vsemana VARCHAR2 (130);
vnumsemana VARCHAR2 (130);
vcnpj VARCHAR2 (130);
BEGIN
FOR d IN ( select distinct codcli, cnpj from (
SELECT codcli, cnpj
FROM base where cnpj = var_cnpj
HAVING COUNT (DISTINCT rca) > 1
GROUP BY codcli, cnpj
union all
SELECT codcli, cnpj
FROM base where cnpj = var_cnpj
HAVING COUNT (DISTINCT superv) > 1
GROUP BY codcli, cnpj
union all
SELECT codcli, cnpj
FROM base where cnpj = var_cnpj
HAVING COUNT (DISTINCT dia) > 1
GROUP BY codcli, cnpj
union all
SELECT codcli, cnpj
FROM base where cnpj = var_cnpj
HAVING COUNT (DISTINCT diasemana) > 1
GROUP BY codcli, cnpj
union all
SELECT codcli, cnpj
FROM base where cnpj = var_cnpj
HAVING COUNT (DISTINCT semana) > 1
GROUP BY codcli, cnpj
union all
SELECT distinct codcli, cnpj
FROM base where cnpj = var_cnpj
HAVING COUNT (DISTINCT nvl(numsemana,-1)) > 1
GROUP BY codcli, cnpj))
LOOP
SELECT DISTINCT codcli,
rca,
superv,
dia,
semana, numsemana, cnpj
INTO vcli,
vrca,
vsup,
vdia,
vsemana, vnumsemana, vcnpj
FROM base
WHERE codcli = d.codcli and cnpj = var_cnpj
AND hora_importacao IN (SELECT MAX (hora_importacao)
FROM base
WHERE codcli = d.codcli and cnpj = d.cnpj);
UPDATE base
SET rca = vrca,
superv = vsup,
dia = vdia,
diasemana = vdia,
semana = vsemana,
cnpj = vcnpj,
numsemana = vnumsemana
WHERE codcli = vcli
and cnpj = d.cnpj;
END LOOP;
END;
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 A sql do "for" poderia ser única comos diversos "having" num "OR" , não !?

 

2 As tabelas tem índices ?

 

3 As estatisticas estão atualizadas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem indice sim:

 

sou novo no oracle.

 

veja como está.

 

 

 

CREATE UNIQUE INDEX idx_base ON base
(
chave ASC,
numnota ASC,
codprod ASC,
codcli ASC
)
PCTFREE 10
INITRANS 2
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOPARALLEL
LOGGING
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o acesso é via codcli e cnpj avaliar um indice por estes dois campos.

 

Avaliar mudar o select tirando os unions e colocando um "or" no having.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.