Mặc dù tôi đồng ý rằng 99% trường hợp là hành động xấu nếu im lặng bỏ qua các ngoại lệ mà không ghi chúng vào đâu đó, nhưng có những tình huống cụ thể mà điều này hoàn toàn có thể chấp nhận được.
Trong những tình huống này, NULL là bạn của bạn:
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
Hai tình huống điển hình mà việc bỏ qua các ngoại lệ có thể mong muốn là:
1) Mã của bạn chứa một câu lệnh mà bạn biết rằng đôi khi sẽ bị lỗi và bạn không muốn sự thật này làm gián đoạn luồng chương trình của mình.>
CREATE OR REPLACE PROCEDURE MY_PROCEDURE()
IS
l_empoyee_name EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
-- Catch potential NO_DATA_FOUND exception and continue
BEGIN
SELECT EMPLOYEE_NAME
INTO l_empoyee_name
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 12345;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Propagate exception
RAISE;
END;
Lưu ý rằng PL / SQL thường không cho phép xử lý ngoại lệ On Error Resume Next loại được biết đến từ Visual Basic, nơi tất cả các ngoại lệ bị bỏ qua và chương trình tiếp tục chạy như thể không có gì xảy ra (xem Khi lỗi tiếp tục, loại xử lý lỗi tiếp theo trong PL / Tiên tri SQL ). Bạn cần phải đính kèm các câu lệnh có khả năng bị lỗi một cách rõ ràng trong một khối lồng nhau.
2) Thủ tục của bạn không quan trọng đến mức bỏ qua tất cả các ngoại lệ mà nó ném ra sẽ không ảnh hưởng đến logic chương trình chính của bạn. (Tuy nhiên, điều này rất hiếm khi xảy ra và thường có thể dẫn đến cơn ác mộng gỡ lỗi về lâu dài)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;