Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tiếp tục xử lý vòng lặp con trỏ sau ngoại lệ trong Oracle

Bạn đang tạo một Thủ tục PL / SQL trong Oracle, trong đó bạn đang thực hiện xử lý trong khi lặp qua con trỏ và nếu có bất kỳ lỗi nào (ngoại lệ) xảy ra thì bạn không muốn hủy quá trình xử lý nhưng bạn muốn ghi lại lỗi và tiếp tục đang xử lý.

Dưới đây là ví dụ được đưa ra để xử lý điều kiện như vậy, trong đó tôi đã tạo hai phần ngoại lệ, một phần là xử lý lỗi trong khi vòng lặp con trỏ và phần còn lại là xử lý ngoại lệ bên ngoài vòng lặp con trỏ.

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. N + 1 Dự phòng và Hợp nhất Máy chủ

  2. GWFG trong Oracle RAC

  3. Kết nối SQL Server với Oracle

  4. Số ngày thứ sáu giữa hai ngày

  5. điều gì xảy ra trong giai đoạn chuyển tiếp của việc áp dụng trong R12.2