sql >> Database >  >> RDS >> Oracle

Oracle PL/SQL Bulk Collect met uitzonderingen opslaan Voorbeeld

In mijn vorige berichten heb ik voorbeelden gegeven voor Bulk Collect-bewerkingen in Oracle. Hier is een voorbeeld van Bulk Collect met Save Exceptions om fouten af ​​te handelen tijdens de verwerking van bulkcollectes.

PL/SQL Bulk Collect met voorbeeld opslaan uitzonderingen

In het volgende PL/SQL-programma zal het de HR-schema WERKNEMER-tabel LAST_NAME-kolom bijwerken, en in twee pogingen zal het proberen te updaten met een NULL-waarde, wat niet is toegestaan ​​voor de LAST_NAME-kolom omdat er geen null-beperking is toegepast. Dus in dit geval wordt de fout weergegeven en wordt deze op het scherm afgedrukt, maar de taak blijft worden bijgewerkt voor andere records omdat we hier Uitzonderingen opslaan gebruiken clausule met 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
/

Uitvoer

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.

Zie ook:

    • Hoe een bestand zippen in PL/SQL?
    • Hoe kan ik een bestand uitpakken in PL/SQL?
    • Selecteer Bulk Collect in Oracle-voorbeeld
  1. Is mysqli_real_escape_string voldoende om SQL-injectie of andere SQL-aanvallen te voorkomen?

  2. java.lang.ClassNotFoundException:org.postgresql.Driver

  3. Gebruik TYPE_ID() om de ID van een gegevenstype in SQL Server op te halen

  4. Hoe MySQL starten met --skip-grant-tables?