Ou alguém pode me dar uma luz de como bloquear uma certa quantidade de registros a serem usados apenas para quem pediu esse bloqueio?
Hoje estou fazendo assim, mas não sei como, mas outra loja conseguiu reservar o mesmo número
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 -*
***********************************************************/
retorno_nrsorte varchar2(5);
ListaNrsorte varchar2(1000);
RETORNOCONFIRMA NUMBER;
erro_int varchar2(1000);
você_dir_log varchar2(100);
você_id_log varchar2(7) := 'CYBELAR';
você_arq_log varchar2(15) := 'NRSORTE.LOG';
você_nome_pgm varchar2(50) := 'PDV_NRSORTE';
vu_file utl_file.file_type;
VN_QTREG NUMBER := 0;
cursor cur_nrosorte is
select rowid, nrosorte
from cybelar_nrosorte
where flguso = 0
and rownum < P_QTD + 1 ;
res cur_nrosorte%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 = você_nome_pgm;
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,
você_nome_pgm,
0,
0,
0);
end;
sp_int_gemco_gera_log('GERA LOG',
você_dir_log,
você_id_log,
você_arq_log,
sysdate,
'INICIO DO LOG',
você_nome_pgm,
0,
0,
0);
open cur_nrosorte;
loop
fetch cur_nrosorte
into res;
if cur_nrosorte%notfound then
ERRO_INT := NULL;
ERRO_INT := 'ERRO AO RESERVAR O NRSORTE PARA A LOJA ' || P_LOJA || '.';
RETORNOCONFIRMA := 1;
exit;
ELSE
UPDATE CYBELAR_NROSORTE
SET FLGUSO = 1, LOJA = P_LOJA, PDV_CAIXA = P_PDV, DATANRSORTE = SYSDATE
WHERE NROSORTE = RES.NROSORTE
RETURNING NROSORTE INTO retorno_nrsorte;
COMMIT;
ListaNrsorte := retorno_nrsorte || '|' || ListaNrsorte;
RETORNOCONFIRMA := 0;
end if;
VN_QTREG := VN_QTREG + 1;
end loop;
IF VN_QTREG = 0 THEN
ERRO_INT := 'ERRO AO RESERVAR O NRSORTE PARA A LOJA ' || P_LOJA || '.';
RETORNOCONFIRMA := 1;
ELSE
ERRO_INT := 'RESERVADO COM SUCESSO.';
RETORNOCONFIRMA := 0;
END IF;
sp_int_gemco_gera_log('GERA LOG',
você_dir_log,
você_id_log,
você_arq_log,
sysdate,
erro_int,
você_nome_pgm,
0,
0,
0);
sp_int_gemco_gera_log('GERA LOG',
você_dir_log,
você_id_log,
você_arq_log,
sysdate,
'FIM DO LOG',
você_nome_pgm,
0,
0,
0);
sp_int_gemco_gera_log('FIM LOG',
você_dir_log,
você_id_log,
você_arq_log,
sysdate,
null,
você_nome_pgm,
0,
0,
0);
close cur_nrosorte;
COMMIT;
P_CONFIRMA := RETORNOCONFIRMA;
P_NROSORTE := ListaNrsorte;
end cybelar_res_nrsorte;