Pular para o conteúdo

Fóruns Banco de dados Oracle Reservar registros para alteração posterior Reservar registros para alteração posterior

#87243
facc
Participante

    Estou enviando a procedure para a analise

    CREATE OR REPLACE PROCEDURE CYBELAR_RES_NRSORTE(P_LOJA IN varchar2,
    P_PDV IN VARCHAR2,
    P_QTD IN NUMBER,
    P_NROSORTE OUT varchar2,
    P_CONFIRMA OUT NUMBER) is
    /***********************************************************
    * PROCEDURE : CYBELAR_RES_NRSORTE *
    * OBJETIVO : RESERVAR O NRSORTE P/ A LOJA E "ESCONDER" *
    DAS DEMAIS LOJAS E OUTRAS RESERVAS *
    * CRIACAO : 08/05/2009 *
    * VERSAO : 1.0 *
    * AUTOR : FABIO A. CAMPOS CRUZ - fabioc@cybelar.com.br *
    ***********************************************************/

    pragma autonomous_transaction;

    retorno_nrsorte varchar2(5);
    ListaNrsorte varchar2(1000);
    RETORNOCONFIRMA NUMBER;
    erro_int varchar2(1000);
    vc_dir_log varchar2(100);
    vc_id_log varchar2(7) := 'CYBELAR';
    vc_arq_log varchar2(60) := 'NRSORTE_' || to_char(sysdate, 'DDMMYY') ||
    '.LOG';
    vc_nome_pgm varchar2(50) := 'PDV_NRSORTE';
    vu_file utl_file.file_type;

    VN_QTREG NUMBER := 0;

    cursor cur_nrosorte is
    --cursor pega numeros "livres"
    select nrosorte
    from cybelar_nrosorte
    where flguso = 0
    AND (LOJA IS NULL OR LOJA = '')
    and rownum = P_QTD + 1;

    res cur_nrosorte%rowtype;

    begin
    BEGIN
    SELECT PINT_NM_DIRETORIO_LOG
    INTO VC_DIR_LOG
    FROM GEMCO_PARAMETRO_INTERFACE PINT, GEMCO_SISTEMA SIST
    WHERE PINT.PINT_CD_SISTEMA = SIST.SIST_CD_SISTEMA
    AND SIST.SIST_DS_SISTEMA = vc_nome_pgm;
    EXCEPTION
    -- SE NAO EXISTIR INFORMAR O DIRETORIO ONDE DEVERA SER
    -- GERADO O LOG DE OCORRENCIAS
    WHEN NO_DATA_FOUND THEN
    VC_DIR_LOG := '/integra/Log';
    WHEN TOO_MANY_ROWS THEN
    VC_DIR_LOG := '/integra/Log';
    WHEN OTHERS THEN
    VC_DIR_LOG := '/integra/Log';
    END;

    begin
    vu_file := utl_file.fopen(vc_dir_log, vc_arq_log, 'r');
    utl_file.fclose(vu_file);
    exception
    when others then
    sp_int_gemco_gera_log('INICIO DO LOG',
    vc_dir_log,
    vc_id_log,
    vc_arq_log,
    sysdate,
    null,
    vc_nome_pgm,
    0,
    0,
    0);
    end;

    FOR rNrSorte IN cur_nrosorte loop

    if CYBELAR_LCK_REGISTRO(rNrSorte.nrosorte) > 0 then
    
      UPDATE CYBELAR_NROSORTE
         SET FLGUSO      = 1,
             LOJA        = P_LOJA,
             PDV_CAIXA   = P_PDV,
             DATANRSORTE = SYSDATE
       WHERE NROSORTE = rNrSorte.nrosorte
      RETURNING NROSORTE INTO retorno_nrsorte;
      COMMIT;
    
      ListaNrsorte    := retorno_nrsorte || '|' || ListaNrsorte;
      RETORNOCONFIRMA := 0;
    end if;
    VN_QTREG := VN_QTREG + 1;
    

    end loop;
    close cur_nrosorte;

    IF VN_QTREG = 0 THEN
    ERRO_INT := 'ERRO AO RESERVAR O NRSORTE (' || P_NROSORTE ||
    ') PARA A LOJA ' || P_LOJA || '.';
    RETORNOCONFIRMA := 1;
    ELSE
    ERRO_INT := 'RESERVADO COM SUCESSO (' || ListaNrsorte ||
    '). LOJA ' || P_LOJA;
    RETORNOCONFIRMA := 0;
    END IF;

    sp_int_gemco_gera_log('GERA LOG',
    vc_dir_log,
    vc_id_log,
    vc_arq_log,
    sysdate,
    erro_int,
    vc_nome_pgm,
    0,
    0,
    0);

    sp_int_gemco_gera_log('FIM LOG',
    vc_dir_log,
    vc_id_log,
    vc_arq_log,
    sysdate,
    null,
    vc_nome_pgm,
    0,
    0,
    0);
    COMMIT;

    P_CONFIRMA := RETORNOCONFIRMA;
    P_NROSORTE := ListaNrsorte;

    end cybelar_res_nrsorte;