Tenho essa procedure, e o DBA onde meu BD está hospedado informou que está consumindo muita memória. Alguém poderia analizar e me retornar como melhorar a performance? Obs. Não posso alterar os parametros de entrada nem de saida
A procedure:
CREATE OR REPLACE PROCEDURE CYBELAR_VER_NRSORTE(P_LOJA IN VARCHAR2,
P_NRPDV IN VARCHAR2,
P_QTDNRSORTE IN NUMBER,
P_RETORNO OUT NUMBER) is
/*************************************************************
* PROCEDURE : CYBELAR_VER_NRSORTE *
* OBJETIVO : VERIFICAR SE POSSUI NRSORTE P/ A LOJA "LIVRES" *
NA QTDD PEDIDA, CASO POSITIVO RETORNA 1, CASO *
NEGATIVO RETORNA 0 *
* CRIACAO : 13/05/2009 *
* VERSAO : 1.0 *
* AUTOR : FABIO A. CAMPOS CRUZ - fabioc@*******.com.br *
*************************************************************/
RETORNO NUMBER;
ERRO_INT VARCHAR2(1000);
você_DIR_LOG VARCHAR2(100);
você_ID_LOG VARCHAR2(7) := 'CYBELAR';
você_ARQ_LOG VARCHAR2(15) := 'VERNRSORTE.LOG';
VG_PROCESSO VARCHAR2(50) := 'VER_NRSORTE';
VU_FILE UTL_FILE.file_type;
VN_QTREG NUMBER := 0;
CURSOR CUR_NRSORTE IS
SELECT ROWID, NROSORTE
FROM CYBELAR_NROSORTE
WHERE FLGUSO = 0
OR LOJA IS NULL
OR LOJA = ''
AND TO_CHAR(mês_ANO, 'YYYYMM') = TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'YYYYMM');
RES CUR_NRSORTE%ROWTYPE;
BEGIN
BEGIN
SELECT PINT_NM_DIRETORIO_LOG
INTO você_DIR_LOG
FROM GEMCO_PARAMETRO_INTERFACE PINT, GEMCO_SISTEMA SIST
WHERE PINT.PINT_CD_SISTEMA = SIST.SIST_CD_SISTEMA
AND SIST.SIST_DS_SISTEMA = VG_PROCESSO;
EXCEPTION
-- SE não EXISTIR INFORMAR O DIRETORIO ONDE DEVERA SER
-- GERADO O LOG DE OCORRENCIAS
WHEN NO_DATA_FOUND THEN
você_DIR_LOG := '/integra/Log';
WHEN TOO_MANY_ROWS THEN
você_DIR_LOG := '/integra/Log';
WHEN OTHERS THEN
você_DIR_LOG := '/integra/Log';
END;
BEGIN
VU_FILE := UTL_FILE.fopen(você_DIR_LOG, você_ARQ_LOG, 'r');
UTL_FILE.FCLOSE(VU_FILE);
EXCEPTION
WHEN OTHERS THEN
sp_int_gemco_gera_log('INICIO DO LOG',
você_DIR_LOG,
você_ID_LOG,
você_ARQ_LOG,
SYSDATE,
NULL,
VG_PROCESSO,
0,
0,
0);
END;
sp_int_gemco_gera_log('GERA LOG',
você_DIR_LOG,
você_ID_LOG,
você_ARQ_LOG,
SYSDATE,
'INICIO DO LOG',
VG_PROCESSO,
0,
0,
0);
OPEN CUR_NRSORTE;
LOOP
FETCH CUR_NRSORTE
INTO RES;
IF CUR_NRSORTE%NOTFOUND THEN
EXIT;
END IF;
VN_QTREG := VN_QTREG + 1;
END LOOP;
IF VN_QTREG < P_QTDNRSORTE THEN
RETORNO := 0;
ELSE
RETORNO := 1;
END IF;
CLOSE CUR_NRSORTE;
P_RETORNO := RETORNO;
END CYBELAR_VER_NRSORTE;
Agradeço desde já qualquer ajuda.