Trong các bài viết trước của tôi, tôi đã đưa ra các ví dụ cho các hoạt động Thu thập hàng loạt trong Oracle. Dưới đây là một ví dụ về Thu thập hàng loạt với Lưu ngoại lệ để xử lý lỗi trong quá trình xử lý thu thập hàng loạt.
Thu thập hàng loạt PL / SQL Ví dụ về Lưu ngoại lệ
Trong chương trình PL / SQL sau, nó sẽ cập nhật cột LAST_NAME của giản đồ HR trong lược đồ nhân sự và trong hai lần thử, nó sẽ cố gắng cập nhật với giá trị NULL, giá trị này không được phép đối với cột LAST_NAME do không áp dụng ràng buộc null. Vì vậy, trong trường hợp này, nó sẽ phát sinh lỗi và nó sẽ in trên màn hình, nhưng tác vụ sẽ tiếp tục cập nhật cho các bản ghi khác vì ở đây chúng tôi đang sử dụng Lưu ngoại lệ mệnh đề Thu thập hàng loạt .
SET SERVEROUTPUT ON --Start the PL/SQL block-- DECLARE --A local PL/SQL table holds the list of new names-- TYPE T_EMP IS TABLE OF VARCHAR2 (100); L_EMP T_EMP := T_EMP ('Smith', 'Adams', NULL, 'King', NULL, 'George'); BULK_ERRORS EXCEPTION; PRAGMA EXCEPTION_INIT (BULK_ERRORS, -24381); BEGIN --FORALL to update the employee names-- FORALL I IN 1 .. L_EMP.COUNT SAVE EXCEPTIONS UPDATE EMPLOYEES SET last_NAME = L_EMP (I); EXCEPTION --BULK_ERRORS exception handler-- WHEN BULK_ERRORS THEN --Display the errors occurred during BULK DML transaction-- FOR J IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP DBMS_OUTPUT.PUT_LINE (CHR (10)); DBMS_OUTPUT.PUT_LINE ( 'Error in UPDATE: ' || SQL%BULK_EXCEPTIONS (J).ERROR_INDEX); DBMS_OUTPUT.PUT_LINE ( 'Error Code is: ' || SQL%BULK_EXCEPTIONS (J).ERROR_CODE); DBMS_OUTPUT.PUT_LINE('Error Message is: ' || SQLERRM('-' || SQL%BULK_EXCEPTIONS (J).ERROR_CODE)); END LOOP; END; / COMMIT /
Đầu ra
Error in UPDATE: 3 Error Code is: 1407 Error Message is: ORA-01407: cannot update () to NULL Error in UPDATE: 5 Error Code is: 1407 Error Message is: ORA-01407: cannot update () to NULL PL/SQL procedure successfully completed. Commit complete.
Xem thêm:
-
- Làm cách nào để ZIP một tệp trong PL / SQL?
- Làm cách nào để UNZIP một tệp trong PL / SQL?
- Chọn Thu thập hàng loạt vào Ví dụ Oracle