Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przykład zbiorczego zbierania danych Oracle PL/SQL z wyjątkami zapisu

W poprzednich wpisach podałem przykłady operacji Bulk Collect w Oracle. Oto przykład funkcji Zbieranie zbiorcze z wyjątkami zapisywania do obsługi błędów podczas przetwarzania zbiorczego.

Przykład zbiorczego zbierania PL/SQL z wyjątkami zapisu

W poniższym programie PL/SQL zaktualizuje kolumnę tabeli LAST_NAME w schemacie HR EMPLOYEES iw dwóch próbach spróbuje zaktualizować wartość NULL, co jest niedozwolone dla kolumny LAST_NAME ze względu na zastosowanie ograniczenia wartości NULL. Tak więc w tym przypadku zgłosi błąd i zostanie wydrukowany na ekranie, ale zadanie będzie nadal aktualizowane dla innych rekordów, ponieważ tutaj używamy Zapisz wyjątki klauzula z Zbieraniem zbiorczym .

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
/

Wyjście

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.

Zobacz też:

    • Jak spakować plik w PL/SQL?
    • Jak rozpakować plik w PL/SQL?
    • Wybierz zbiorcze gromadzenie do przykładu Oracle
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ręcznie dodaj nową instancję RAC

  2. Wypełnianie elementu drzewa grupą rekordów w formularzach Oracle

  3. Spojrzenie na Oracle Group-by Bug

  4. Jak przyciąć tabelę w procedurze Oracle?

  5. Oracle 12:Dołącz do listy rozdzielanej przecinkami?