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

Esempio di raccolta in blocco Oracle PL/SQL con eccezioni di salvataggio

Nei miei post precedenti, ho fornito esempi di operazioni Bulk Collect in Oracle. Ecco un esempio di raccolta in blocco con eccezioni di salvataggio per gestire gli errori durante l'elaborazione della raccolta in blocco.

Esempio di raccolta in blocco PL/SQL con eccezioni di salvataggio

Nel seguente programma PL/SQL, aggiornerà la colonna LAST_NAME della tabella EMPLOYEES dello schema HR e in due tentativi tenterà di aggiornare con un valore NULL, che non è consentito per la colonna LAST_NAME perché non viene applicato un vincolo nullo. Quindi, in questo caso, solleverà l'errore e verrà stampato sullo schermo, ma l'attività continuerà ad aggiornarsi per altri record perché qui stiamo usando Salva eccezioni clausola con Collezione in blocco .

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
/

Uscita

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.

Vedi anche:

    • Come zippare un file in PL/SQL?
    • Come decomprimere un file in PL/SQL?
    • Seleziona la raccolta in blocco nell'esempio Oracle