Você está criando um procedimento PL/SQL no Oracle no qual está processando enquanto percorre o cursor e se algum erro (exceção) surgir, você não deseja abortar o processamento, mas deseja registrar o erro e continuar o em processamento.
Abaixo está o exemplo dado para lidar com tal condição, na qual criei duas seções de exceção, a primeira é para tratar o erro enquanto o loop do cursor e a outra é para tratar a exceção fora do loop do cursor.
SET SERVEROUTPUT ON; DECLARE CURSOR c_emp IS SELECT ROWNUM, empno, ename FROM emp; vn NUMBER; vsqlcode VARCHAR2 (20); vsqlerrm VARCHAR2 (4000); BEGIN FOR c IN c_emp LOOP BEGIN IF c.ROWNUM = 3 THEN -- Generate an error at line 3 vn := 'x'; END IF; EXCEPTION WHEN OTHERS THEN vsqlcode := SQLCODE; vsqlerrm := SQLERRM; INSERT INTO error_log (error_no, ERROR_TEXT) VALUES (vsqlcode, vsqlerrm); END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN vsqlcode := SQLCODE; vsqlerrm := SQLERRM; ROLLBACK; INSERT INTO error_log (error_no, ERROR_TEXT) VALUES (vsqlcode, vsqlerrm); Commit; END;