Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So setzen Sie die Cursorschleifenverarbeitung nach einer Ausnahme in Oracle fort

Sie erstellen eine PL/SQL-Prozedur in Oracle, in der Sie die Verarbeitung durchführen, während Sie den Cursor durchlaufen, und wenn ein Fehler (Ausnahme) auftritt, möchten Sie die Verarbeitung nicht abbrechen, sondern den Fehler protokollieren und fortsetzen Verarbeitung.

Unten ist das Beispiel gegeben, um eine solche Bedingung zu handhaben, in der ich zwei Ausnahmeabschnitte erstellt habe, der erste ist, den Fehler während der Cursor-Schleife zu behandeln, und der andere ist, die Ausnahme außerhalb der Cursor-Schleife zu behandeln.

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;