Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Exemplo de Coleta em Massa Oracle PL/SQL com Salvar Exceções


Em minhas postagens anteriores, dei exemplos de operações de coleta em massa no Oracle. Aqui está um exemplo de Coleta em Massa com Salvar Exceções para lidar com erros durante o processamento de coleta em massa.

Exemplo de Coleta em Massa PL/SQL com Salvar Exceções


No programa PL/SQL a seguir, ele atualizará a coluna LAST_NAME da tabela EMPLOYEES do esquema HR e, em duas tentativas, tentará atualizar com um valor NULL, o que não é permitido para a coluna LAST_NAME devido à restrição não nula ser aplicada. Então, nesse caso, ele vai gerar o erro, e vai imprimir na tela, mas a tarefa vai continuar atualizando para outros registros porque aqui estamos usando Salvar exceções cláusula com Coleta em massa .
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
/

Saída

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.

Veja também:
    • Como compactar um arquivo em PL/SQL?
    • Como descompactar um arquivo em PL/SQL?
    • Selecione a coleta em massa no exemplo Oracle