--PL/SQL錯誤
? 編譯時
? 運行時
--運行時的出錯處理
? EXCEPTION
--異常處理塊
DECLARE
?…
BEGIN
?…
EXCEPTION
?WHEN OTHERS THEN
??handler_error(…);
END;
--用戶自定義的異常
DECLARE
?e_TooManyStudents EXCEPTION;
?…
BEGIN
?…
?RAISE e_TooManyStudents;
?…
EXCEPTION
?WHEN e_TooManyStudents THEN
??…
END;
--預定義的ORACLE異常
ORA-0001
? DUP_VAL_ON_INDEX
ORA-0051
? TIMEOUT_ON_RESOURCE
ORA-1001
? INVALID_CURSOR
…
ORA-6533
? SUBSCRIPT_BEYOND_COUNT
--觸發異常
RAISE exception_variable
DECLARE
? A EXCEPTION
BEGIN
? …
? RAISE A;
? …
? EXCEPTION
??? WHEN A THEN
??? …
END;
--處理異常
EXCEPTION
? WHEN e_TooManyStudents THEN
??? INSERT INTO log_file(info)?
??? VALUES(‘Major 1100 has ‘ || v_CurStudents || ’ max aloowed is ‘ || v_Max);
END;
--處理所有的異常
EXCEPTION
? WHEN e_TooManyStudents THEN
??? …
? WHEN OTHERS THEN
??? v_ErrCode := SQLCODE;
??? v_ErrText := SUBSTR(SQLERRM, 1, 200);
??? INSERT INTO log_file(code, message, info)
??? VALUES(v_ErrCode, v_ErrText, ‘ORACLE Error’);
END;