Tworzysz procedurę PL/SQL w Oracle, w której wykonujesz przetwarzanie podczas przechodzenia przez kursor i jeśli wystąpi jakikolwiek błąd (wyjątek), nie chcesz przerywać przetwarzania, ale chcesz zarejestrować błąd i kontynuować przetwarzanie.
Poniżej znajduje się przykład obsługi takiego warunku, w którym stworzyłem dwie sekcje wyjątków, pierwsza to obsługa błędu podczas pętli kursora, a druga to obsługa wyjątku poza pętlą kursora.
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;