Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Beispiel für Oracle PL/SQL-Massenerfassung mit Speicherausnahmen

In meinen vorherigen Beiträgen habe ich Beispiele für Bulk-Collect-Operationen in Oracle gegeben. Hier ist ein Beispiel für die Massenerfassung mit Speicherausnahmen zur Behandlung von Fehlern während der Massenerfassungsverarbeitung.

Beispiel für PL/SQL-Massenerfassung mit Speicherausnahmen

Im folgenden PL/SQL-Programm wird die Spalte LAST_NAME der HR-Schema-Tabelle EMPLOYEES aktualisiert und in zwei Versuchen versucht, mit einem NULL-Wert zu aktualisieren, der für die Spalte LAST_NAME nicht zulässig ist, da die Einschränkung nicht null angewendet wird. In diesem Fall wird also der Fehler ausgegeben und auf dem Bildschirm gedruckt, aber die Aufgabe wird weiterhin für andere Datensätze aktualisiert, da wir hier Ausnahmen speichern verwenden Klausel mit 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
/

Ausgabe

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.

Siehe auch:

    • Wie kann ich eine Datei in PL/SQL komprimieren?
    • Wie entpacke ich eine Datei in PL/SQL?
    • Wählen Sie Bulk Collect in Oracle Beispiel aus