Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Xử lý ngoại lệ PL / SQL:không làm gì (bỏ qua ngoại lệ)

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy cập bảng của người dùng khác trong Quy trình được lưu trữ của Oracle

  2. Oracle thay thế dấu hoa thị cho tất cả các cột trong một khung nhìn

  3. Làm cách nào để kết nối với cơ sở dữ liệu Oracle dựa trên web bằng Java?

  4. Làm cách nào để xóa giá trị mặc định khỏi một cột trong oracle?

  5. Chuyển đổi truy vấn SQL sang sử dụng toán tử bộ