Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak kontynuować przetwarzanie pętli kursora po wystąpieniu wyjątku w Oracle?

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. to jest błąd ORA-12154:TNS:nie można rozwiązać podanego identyfikatora połączenia?

  2. oracle systimestamp (sysdate) do milisekund

  3. Oracle Big Data SQL

  4. wyświetl niestandardowy tekst sql z wyniku kolumny tabeli

  5. Jak utworzyć nie zerowe ograniczenie w Oracle?