sql >> Databasteknik >  >> RDS >> Oracle

Oracle PL/SQL Bulk Collect med Spara undantag Exempel

I mina tidigare inlägg har jag gett exempel på Bulk Collect-operationer i Oracle. Här är ett exempel på Bulk Collect med Spara undantag för att hantera fel under bulk collect bearbetning.

PL/SQL-bulksamling med exempel på Spara undantag

I följande PL/SQL-program kommer den att uppdatera kolumnen LAST_NAME-tabellen HR-schema MEDARBETARE, och i två försök kommer den att försöka uppdatera med ett NULL-värde, vilket inte är tillåtet för kolumnen LAST_NAME på grund av att ingen null-begränsning tillämpas. Så i det här fallet kommer det att visa felet och det kommer att skrivas ut på skärmen, men uppgiften kommer att fortsätta att uppdateras för andra poster eftersom vi här använder Spara undantag 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
/

Utdata

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 även:

    • Hur zippar man en fil i PL/SQL?
    • Hur tar man bort en fil i PL/SQL?
    • Välj Bulk Collect into Oracle-exempel
  1. Oracle-entiteten i VS-entitetsramverket uppdaterar inte primärnyckeln i koden

  2. Hur man får kumulativ summa

  3. Optimera överlappande frågor Del 1:Introduktion och förbättrad T-SQL-lösning

  4. Infoga i en MySQL-tabell eller uppdatera om det finns