В предишните си публикации дадох примери за операции по групово събиране в Oracle. Ето пример за групово събиране с изключения за запазване за обработка на грешки по време на обработката на групово събиране.
Групово събиране на PL/SQL с пример за изключения за запазване
В следната PL/SQL програма той ще актуализира колоната LAST_NAME на таблицата на HR схемата EMPLOYEES и в два опита ще се опита да актуализира със стойност NULL, която не е разрешена за колоната LAST_NAME поради ненулевото ограничение. Така че в този случай ще изведе грешката и ще се отпечата на екрана, но задачата ще продължи да се актуализира за други записи, защото тук използваме Запазване на изключения клауза с Групово събиране .
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 /
Изход
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.
Вижте също:
- Как да архивирам файл в PL/SQL?
- Как да разархивирате файл в PL/SQL?
- Изберете групово събиране в пример на Oracle
-
Как да се върнете назад, когато възникне грешка при изпълнение на командата за зареждане на sql?
-
Времето за изчакване на връзката за DriverManager getConnection
-
Винаги ли 'Select' подрежда по първичен ключ?
-
Клауза на Oracle SQL Where за намиране на записи за дата, по-стари от 30 дни
-
променете размера на типа данни в sql