sql >> データベース >  >> RDS >> Oracle

Oracle PL/SQLの一括収集と例外の保存の例

    以前の投稿では、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の例への一括収集を選択
    1. MySQLのパラメータ化されたクエリ

    2. Oracle Convert Seconds to Hours:Minutes:Seconds

    3. MigrationSchemaMissing(django_migrationsテーブルを作成できません(%s)%exc)

    4. タイムゾーンが等しいPostgres時間