sql >> Base de Datos >  >> RDS >> Oracle

Cómo continuar el procesamiento de bucle de cursor después de una excepción en Oracle

Está creando un procedimiento PL/SQL en Oracle en el que está procesando mientras recorre el cursor y si surge algún error (excepción), entonces no desea cancelar el procesamiento, pero desea registrar el error y continuar con el proceso. procesamiento.

A continuación se muestra el ejemplo para manejar tal condición, en el que he creado dos secciones de excepción, la primera es para manejar el error mientras el bucle del cursor y la otra es para manejar la excepción fuera del bucle del 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;