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