I mina tidigare inlägg har jag gett exempel på Bulk Collect-operationer i Oracle. Här är ett exempel på Bulk Collect med Spara undantag för att hantera fel under bulk collect bearbetning.
PL/SQL-bulksamling med exempel på Spara undantag
I följande PL/SQL-program kommer den att uppdatera kolumnen LAST_NAME-tabellen HR-schema MEDARBETARE, och i två försök kommer den att försöka uppdatera med ett NULL-värde, vilket inte är tillåtet för kolumnen LAST_NAME på grund av att ingen null-begränsning tillämpas. Så i det här fallet kommer det att visa felet och det kommer att skrivas ut på skärmen, men uppgiften kommer att fortsätta att uppdateras för andra poster eftersom vi här använder Spara undantag klausul med Bulk Collect .
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 /
Utdata
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.
Se även:
- Hur zippar man en fil i PL/SQL?
- Hur tar man bort en fil i PL/SQL?
- Välj Bulk Collect into Oracle-exempel