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

Khai báo ngoại lệ do người dùng xác định bằng phương pháp RAISE_APPLICATION_ERROR trong cơ sở dữ liệu Oracle

Như đã thảo luận trong phần giới thiệu về xử lý ngoại lệ PL / SQL, có ba cách khai báo ngoại lệ do người dùng xác định trong Oracle PL / SQL. Trong số ba cách đó, chúng ta đã thảo luận và tìm hiểu cách đầu tiên trong hướng dẫn trước. Hôm nay trong blog này, chúng ta sẽ đi trước một bước và xem cách thứ hai để khai báo ngoại lệ do người dùng xác định và tìm hiểu cách khai báo ngoại lệ do người dùng xác định bằng phương thức RAISE_APPLICATION_ERROR.

Phương thức RAISE_APPLICATION_ERROR là gì?

LỖI ỨNG DỤNG RAISE là một thủ tục được lưu trữ được tích hợp sẵn với phần mềm Oracle. Sử dụng quy trình này, bạn có thể liên kết số lỗi với thông báo lỗi tùy chỉnh. Kết hợp cả số lỗi cũng như thông báo lỗi tùy chỉnh, bạn có thể tạo một chuỗi lỗi trông tương tự như các chuỗi lỗi mặc định được công cụ Oracle hiển thị khi xảy ra lỗi.

Chúng tôi có thể tạo ra bao nhiêu lỗi khi sử dụng quy trình RAISE_APPLICATION_ERROR?

Thủ tục RAISE_APPLICATION_ERROR cho phép chúng tôi đánh số lỗi của mình từ -20.000 đến -20.999, do đó chúng tôi có thể nói rằng sử dụng quy trình RAISE_APPLICATION_ERROR, chúng tôi có thể tạo ra 1000 lỗi.

Raise_application_error là một phần của gói nào?

Bạn có thể tìm thấy quy trình RAISE_APPLICATION_ERROR bên trong gói DBMS_STANDARD.

Cú pháp của Raise_Application_Error

raise_application_error (error_number, message [, {TRUE | FALSE}]);

Ở đây error_number là một số nguyên âm trong phạm vi -20000 .. -20999 và thông báo là một chuỗi ký tự dài tối đa 2048 byte. Trong trường hợp tham số thứ ba tùy chọn là TRUE, lỗi được đặt trên chồng của tất cả các lỗi trước đó. Tuy nhiên trong trường hợp FALSE (tham số mặc định), lỗi sẽ thay thế tất cả các lỗi trước đó. RAISE_APPLICATION_ERROR là một phần của gói DBMS_STANDARD và bạn không cần đủ điều kiện tham chiếu đến gói STANDARD.

Ví dụ về thủ tục RAISE_APPLICATION_ERROR

Trong ví dụ sau, chúng tôi sẽ lấy đầu vào kiểu dữ liệu số từ người dùng và kiểm tra xem nó có phải là 18 trở lên hay không. Nếu không phải thì lỗi do người dùng xác định, mà chúng tôi sẽ khai báo, sẽ tăng lên, nếu không sẽ có quy trình thực thi bình thường của chương trình.

Bước 1:Bật đầu ra máy chủ

Nếu chúng ta muốn xem kết quả do chương trình PL / SQL trả về trên màn hình đầu ra mặc định thì chúng ta sẽ phải đặt đầu ra máy chủ "bật", theo mặc định được đặt thành "tắt" cho phiên.

SET SERVEROUTPUT ON;

Bước 2:Lấy thông tin người dùng nhập

Mặc dù chúng ta có thể cố định các giá trị trong mã của mình như chúng ta đã làm trong hướng dẫn trước nhưng nó không thú vị như vậy. Để làm cho mã năng động hơn, tôi quyết định chấp nhận đầu vào của người dùng lần này bằng cách cho phép họ nhập giá trị vào hộp bật lên có in thông báo tùy chỉnh trên đó.

Chúng ta có thể lấy dữ liệu đầu vào bằng cách sử dụng hộp bật lên với thông báo tùy chỉnh được in trên đó bằng lệnh ACCEPT trong Oracle PL / SQL.

ACCEPT var_age NUMBER PROMPT 'What is your age?';

Lệnh bắt đầu bằng từ khóa accept, theo sau là tên của biến và kiểu dữ liệu của nó. Trong trường hợp của chúng tôi, tên là var_age và kiểu dữ liệu là NUMBER. Đó là nửa đầu của tuyên bố. Phần này sẽ giúp chúng ta trong việc lưu trữ giá trị đầu vào. Nửa còn lại của câu lệnh sẽ chịu trách nhiệm in thông báo tùy chỉnh trên hộp bật lên. Sử dụng từ khóa PROMPT nằm ngay sau kiểu dữ liệu của biến, bạn có thể chỉ định bất kỳ chuỗi mong muốn nào mà bạn muốn in trên hộp bật lên của mình. Trong trường hợp của chúng tôi, thông báo tùy chỉnh này sẽ là "Tuổi của bạn là bao nhiêu?"

Nếu bạn muốn tôi thực hiện một hướng dẫn mở rộng giải thích chi tiết lệnh ACCEPT thì hãy chia sẻ blog này bằng cách sử dụng thẻ bắt đầu bằng #RebellionRider. Bạn cũng có thể viết thư cho tôi trên twitter @RebellionRider của tôi.

Bước 3:Khai báo biến

DECLARE
  age   NUMBER := &var_age;

Do giới hạn phạm vi, chúng tôi không thể sử dụng giá trị được lưu trữ vào biến mà chúng tôi đã sử dụng trong lệnh accept. Điều này có nghĩa là chúng ta không thể sử dụng trực tiếp giá trị đó vào chương trình PL / SQL của mình. Chúng ta có thể giải quyết vấn đề này bằng cách gán giá trị đã được lưu trữ trong biến var_age cho một biến cục bộ của khối PL / SQL. Đó chính xác là những gì chúng tôi đã làm trong đoạn mã trên.

Trong đoạn mã trên, chúng tôi đã khai báo một biến cục bộ có tên là 'age' và gán giá trị được lưu trữ vào biến var_age bằng toán tử gán.

Bước 4:Khai báo ngoại lệ do người dùng xác định bằng cách sử dụng quy trình RAISE_APPLICATION_ERROR

BEGIN
  IF age < 18 THEN
   RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
  END IF;

Ở đây trong đoạn mã này, chúng tôi đã khai báo ngoại lệ do người dùng xác định bằng thủ tục RAISE_APPLICATION_ERROR. Thủ tục này được gọi là sử dụng hai tham số. Trong đó tham số đầu tiên là số âm, trong trường hợp của tôi là -20008 và số thứ hai là một chuỗi được hiển thị nếu cùng một lỗi xảy ra.

Bây giờ câu hỏi là khi nào thì lỗi này sẽ xảy ra?

Như bạn có thể thấy rằng mã được đặt bên trong khối điều khiển có điều kiện IF-THEN đảm bảo rằng lỗi sẽ chỉ được nâng lên nếu tuổi của người dùng dưới 18 tuổi.

Bước 5:Câu lệnh thực thi

DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');

Các câu lệnh thực thi là những câu lệnh được biên dịch và chạy khi không có lỗi và chương trình có quy trình thực thi bình thường. Để làm cho mã đơn giản và dễ hiểu, tôi chỉ viết một câu lệnh duy nhất là câu lệnh DBMS OUTPUT.

Bước 6:Viết trình xử lý Ngoại lệ

Bây giờ chúng ta đã khai báo cũng như nâng cao ngoại lệ do người dùng định nghĩa, tiếp theo, chúng ta cần viết trình xử lý ngoại lệ cho nó. Như đã nói trong hướng dẫn PL / SQL trước, trong phần Trình xử lý ngoại lệ, chúng tôi chỉ định điều gì sẽ xảy ra khi lỗi bạn nêu ra sẽ kích hoạt.

EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

Trong phần xử lý ngoại lệ này, tôi đã gọi một hàm SQLERRM bằng cách sử dụng câu lệnh DBMS OUTPUT. Đây là một chức năng tiện ích do Oracle cung cấp để truy xuất thông báo lỗi cho trường hợp ngoại lệ xảy ra gần đây nhất.

Hãy biên dịch tất cả các đoạn mã nhỏ này thành một chương trình lớn.

Ngoại lệ do người dùng xác định bằng thủ tục Raise_Application_Error

SET SERVEROUTPUT ON;
ACCEPT var_age NUMBER PROMPT 'What is yor age';
DECLARE
  age   NUMBER := &var_age;
BEGIN
  IF age < 18 THEN
    RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
  END IF; 
  DBMS_OUTPUT.PUT_LINE ('Sure, What would you like to have?'); 
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
/ 

Đây là một hướng dẫn ngắn gọn nhưng mang tính mô tả về cách khai báo ngoại lệ do người dùng xác định bằng thủ tục Raise_Application_Error trong Cơ sở dữ liệu Oracle. Hy vọng bạn đã học được một cái gì đó mới và thích đọc. Bạn có thể giúp những người khác trong học tập cũng như giúp tôi và kênh của tôi phát triển bằng cách chia sẻ blog này trên Phương tiện truyền thông xã hội của bạn. Cảm ơn và chúc một ngày tốt lành!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-16205 Nâng cấp lên 11.2.0.3

  2. PLS-00103:Gặp phải biểu tượng CREATE

  3. Hàm TRUNC (ngày tháng) trong Oracle

  4. ORA-28000:lỗi tài khoản bị khóa thường xuyên xảy ra

  5. Cách sử dụng khóa ngoại trong oracle