sql >> Databáze >  >> RDS >> Oracle

Příklad hromadného sběru Oracle PL/SQL s výjimkami uložení

Ve svých předchozích příspěvcích jsem uvedl příklady operací hromadného sběru v Oracle. Zde je příklad hromadného shromažďování s výjimkami uložení, který řeší chyby během hromadného shromažďování.

Příklad hromadného shromažďování PL/SQL s výjimkami uložení

V následujícím programu PL/SQL aktualizuje sloupec LAST_NAME tabulky HR schématu EMPLOYEES a ve dvou pokusech se pokusí aktualizovat s hodnotou NULL, což není povoleno pro sloupec LAST_NAME, protože je aplikováno omezení nenula. V tomto případě tedy vyvolá chybu a vytiskne se na obrazovku, ale úloha se bude nadále aktualizovat pro další záznamy, protože zde používáme Uložit výjimky klauzule s Hromadným sběrem .

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
/

Výstup

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.

Viz také:

    • Jak zazipovat soubor v PL/SQL?
    • Jak rozbalit soubor v PL/SQL?
    • Vyberte možnost Hromadné shromažďování do příkladu Oracle
  1. JOIN dotazy vs. více dotazů

  2. Nelze předat hodnotu řetězce 1,2 jako vstup do dotazu Oracle

  3. Určení data Velikonoc pro jakýkoli rok v Oracle PLSQL

  4. Jak replikovat databázi MySQL na jiný server