Nâng caoOracle PL/SQL ~15 phút

Exception handling trong procedure

Exception section là error contract của procedure: nó quyết định lỗi nào được xử lý, lỗi nào đổi thông điệp và lỗi nào phải truyền tiếp.

Lý thuyết

Predefined exceptions

Oracle có sẵn NO_DATA_FOUND, TOO_MANY_ROWS, ZERO_DIVIDE, DUP_VAL_ON_INDEX...

Handler cụ thể phải đặt trước WHEN OTHERS.

RAISE_APPLICATION_ERROR

Dùng mã từ -20000 đến -20999 để trả lỗi nghiệp vụ cho application, ví dụ -20002: Không tìm thấy nhân viên.

RAISE

RAISE; trong handler phát lại exception hiện tại và giữ call stack tốt hơn việc tạo lỗi chung chung.

Anti-pattern

  • WHEN OTHERS THEN NULL nuốt lỗi và làm dữ liệu sai mà caller tưởng thành công.
  • COMMIT trong exception handler có thể lưu trạng thái dở dang.
  • Trả mọi lỗi thành một message giống nhau làm mất khả năng điều tra.

Có thể log SQLCODE, SQLERRMDBMS_UTILITY.FORMAT_ERROR_BACKTRACE, sau đó RAISE lại.

Chỉ bắt exception khi bạn có hành động cụ thể: phục hồi, chuyển thành domain error, hoặc thêm context rồi phát lại.

Thuật ngữ (di chuột để xem giải thích)

Dữ liệu mẫu

Đang tải dữ liệu mẫu…