Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да продължите обработката на курсора след изключение в Oracle

Вие създавате PL/SQL процедура в Oracle, в която извършвате обработка, докато минавате през курсора и ако се появи някаква грешка (изключение), тогава не искате да прекъснете обработката, но искате да регистрирате грешката и да продължите обработка.

По-долу е даден примерът за обработка на такова условие, в който създадох две секции за изключение, първата е за обработка на грешката, докато курсорния цикъл, а другата е за обработка на изключение извън цикъла на курсора.

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. Как да активирате режима на архивен дневник в Oracle Database 19c

  2. проблем с функцията to_date със sysdate

  3. 12c Адаптивни планове в SQL Developer

  4. Използване на Dapper с Oracle

  5. Къде са моите кръпки?