Да, это способ продолжить выполнение LOOP
, если что-то происходит - заключить содержимое цикла в собственный блок BEGIN-EXCEPTION-END
.
Ваш код, кажется, в порядке, но в нем отсутствует END
утверждение для упомянутого внутреннего BEGIN-EXCEPTION-
END блока, то есть
create or replace Procedure EY IS
CURSOR c1 is
select ey_id , cycle_id
from mvs v
cross join cycle s
l_var c1%ROWTYPE;
BEGIN
OPEN c1;
LOOP
BEGIN
FETCH c1 into l_var;
EXIT when c1%NOTFOUND;
insert into EY (EY_id, cycle_id, create_dt, create_user_id)
values (l_var.ey_id, l_var.cycle_id, trunc(sysdate), '1');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('duplicate value');
end; --> you're missing this END
END LOOP;
close c1;
END EY;
Если вы правильно сделаете отступ в коде, легче определить виновника.