estou desenvolvendo uma procedure e me deparei com a seguinte situação:
Eu executo 2 selects into para realizar uma validação, com base nos dados de um cursor, porém como cursores implicitos retornam exception quando não encontram registros, ele acaba saindo da proc, pois já tenho alguns excption handlers...
segue abaixo o código para melhor visualização:
CREATE OR REPLACE PROCEDURE C_BCRC120 AS
cursor creg is select * from bcrc120 order by id;
v_creg creg%rowtype;
v_cfop varchar2(4);
v_cfop2 varchar2(4);
v_erro_bcrc120 exception;
v_ind_oper bcrc100.ind_oper%type;
BEGIN
-- abre cursor
open creg;
FETCH creg INTO v_creg;
IF creg%NOTFOUND THEN
RAISE v_erro_bcrc120;
END IF;
LOOP
-- Valida o campo COD_DOC_IMP
verif_valor_campo(v_creg.id, v_creg.reg, v_creg.cod_doc_imp, 'COD_DOC_IMP');
select ind_oper into v_ind_oper from bcrc100 where id = v_creg.id_c100;
select SUBSTR(CFOP, 1, 1) INTO v_cfop from bcrc170
where id_c100 = v_creg.id_c100;
select SUBSTR(CFOP, 1, 1)INTO v_cfop2 from bcrc190
where id_c170 = (select id from bcrc170 where id_c100 = v_creg.id_c100);
-- Verifica se o registro está dentro das regras de importação
IF v_ind_oper = '0' and( v_cfop <> '3' or v_cfop2 <> '3') THEN
gravar_critica(v_creg.id, v_creg.reg, v_creg.id_c100, '', busca_erro(1055), 'ID_C100');
END IF;
FETCH creg INTO v_creg;
EXIT WHEN creg%NOTFOUND;
END LOOP;
close creg;
EXCEPTION
WHEN v_erro_bcrc120 THEN NULL;
WHEN others THEN NULL;
END;