sql >> Database teknologi >  >> RDS >> Oracle

Oracle PL/SQL-masseindsamling med Gem undtagelser Eksempel

I mine tidligere indlæg har jeg givet eksempler på Bulk Collect-operationer i Oracle. Her er et eksempel på Bulk Collect med Gem undtagelser til at håndtere fejl under masseindsamlingsbehandling.

PL/SQL-masseindsamling med Gem undtagelser Eksempel

I det følgende PL/SQL-program vil den opdatere kolonnen HR-skema MEDARBEJDERE-tabellen LAST_NAME, og i to forsøg vil den forsøge at opdatere med en NULL-værdi, som ikke er tilladt for LAST_NAME-kolonnen på grund af, at der ikke er anvendt null-begrænsning. Så i dette tilfælde vil den rejse fejlen, og den udskrives på skærmen, men opgaven vil fortsætte med at opdatere for andre poster, fordi her bruger vi Gem undtagelser klausul med Bulk Collect .

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
/

Output

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.

Se også:

    • Hvordan zipper man en fil i PL/SQL?
    • Hvordan UNZIP en fil i PL/SQL?
    • Vælg Masseindsamling til Oracle-eksempel
  1. Sparse kolonner i SQL Server:Indvirkning på tid og rum

  2. PostgreSQL:Ufølsom streng sammenligning

  3. Chen Notation

  4. Konverter JS datotid til MySQL datotid