sql >> Databáze >  >> RDS >> Oracle

Jak pokračovat ve zpracování smyčky kurzoru po výjimce v Oracle

Vytváříte proceduru PL/SQL v Oracle, ve které provádíte zpracování při procházení kurzorem a pokud se objeví nějaká chyba (výjimka), nechcete zpracování přerušit, ale chcete zaprotokolovat chybu a pokračovat v zpracování.

Níže je uveden příklad pro zpracování takové podmínky, ve kterém jsem vytvořil dvě sekce výjimek, první je zpracování chyby během smyčky kurzoru a druhá je zpracování výjimky mimo smyčku kurzoru.

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;

  1. Je Microsoft Access stále relevantní v roce 2020?

  2. Jak formátovat čísla v SQL Server

  3. Kdy použít zděděné tabulky v PostgreSQL?

  4. Příklady COT() v SQL Server