sql >> Base de Datos >  >> RDS >> Oracle

Ejemplo de recopilación masiva de Oracle PL/SQL con excepciones de guardado

En mis publicaciones anteriores, he dado ejemplos de operaciones de recolección masiva en Oracle. Este es un ejemplo de Recolección masiva con excepciones de guardado para manejar errores durante el procesamiento de recolección masiva.

Ejemplo de recopilación masiva de PL/SQL con excepción de guardado

En el siguiente programa PL/SQL, actualizará la columna LAST_NAME de la tabla EMPLOYEES del esquema de recursos humanos y, en dos intentos, intentará actualizar con un valor NULL, que no está permitido para la columna LAST_NAME debido a que no se aplica una restricción nula. Entonces, en este caso, generará el error y se imprimirá en la pantalla, pero la tarea continuará actualizándose para otros registros porque aquí estamos usando Guardar excepciones cláusula con Cobro masivo .

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
/

Salida

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.

Véase también:

    • ¿Cómo comprimir un archivo en PL/SQL?
    • ¿Cómo DESCOMPRIMIR un archivo en PL/SQL?
    • Seleccione la recopilación masiva en el ejemplo de Oracle