Oracle
 sql >> Database >  >> RDS >> Oracle

Come continuare l'elaborazione del ciclo del cursore dopo l'eccezione in Oracle

Si sta creando una procedura PL/SQL in Oracle in cui si sta eseguendo l'elaborazione mentre si scorre il cursore e se si verifica un errore (eccezione), non si desidera interrompere l'elaborazione ma si desidera registrare l'errore e continuare il elaborazione.

Di seguito è riportato l'esempio per gestire tale condizione, in cui ho creato due sezioni di eccezione, la prima è per gestire l'errore mentre il ciclo del cursore e l'altra è per gestire l'eccezione al di fuori del ciclo del cursore.

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;