以前の投稿では、Oracleでの一括収集操作の例を示しました。一括収集処理中のエラーを処理するための、保存例外を使用した一括収集の例を次に示します。
保存例外を使用したPL/SQL一括収集の例
次のPL/SQLプログラムでは、HRスキーマのEMPLOYEES表のLAST_NAME列を更新し、2回の試行で、NULL値で更新を試みます。これは、NULL制約が適用されていないため、LAST_NAME列では許可されていません。したがって、この場合、エラーが発生し、画面に出力されますが、ここでは例外の保存を使用しているため、タスクは他のレコードに対して更新を続けます。 一括収集を含む句 。
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 /
出力
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.
参照:
-
- PL / SQLでファイルをZIPする方法は?
- PL / SQLでファイルを解凍するにはどうすればよいですか?
- Oracleの例への一括収集を選択