توضیحات

گاهی نیاز است که برنامه‌نویس خود exception را تعریف کند که در پکیج استاندارد وجود ندارد.

دستور

در ادامه استفاده از name programmer-defined exception را در تابع و پروسیجر بررسی می‌کنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
CREATE [OR REPLACE] PROCEDURE procedure_name
   [ (parameter [,parameter]) ]
IS
   [declaration_section]
 
   exception_name EXCEPTION;
 
BEGIN
   executable_section
   RAISE exception_name;
 
EXCEPTION
   WHEN exception_name THEN
      [statements]
 
   WHEN OTHERS THEN
      [statements]
 
END [procedure_name];
CREATE [OR REPLACE] FUNCTION function_name
   [ (parameter [,parameter]) ]
   RETURN return_datatype
 
IS | AS
   [declaration_section]
 
   exception_name EXCEPTION;
 
BEGIN
   executable_section
 
   RAISE exception_name;
 
EXCEPTION
   WHEN exception_name THEN
      [statements]
 
   WHEN OTHERS THEN
      [statements]
 
END [function_name];

.


مثال

در مثال زیر پروسیجری که از یک named programmer-defined exception استفاده کرده است را مشاهده می‌کنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE OR REPLACE PROCEDURE add_new_order
   (order_id_in IN NUMBER, sales_in IN NUMBER)
IS
   no_sales EXCEPTION;
 
BEGIN
   IF sales_in = 0 THEN
      RAISE no_sales;
 
   ELSE
      INSERT INTO orders (order_id, total_sales )
      VALUES ( order_id_in, sales_in );
   END IF;
 
EXCEPTION
   WHEN no_sales THEN
      raise_application_error (-20001,'You must have sales in order to submit the order.');
 
   WHEN OTHERS THEN
      raise_application_error (-20002,'An error has occurred inserting an order.');
 
END;

در این مثال یک named programmer-defined exception به نام no_sales
تعریف کرده‌ایم:

1
no_sales EXCEPTION;

سپس شرط اجرایexception را گفته‌ایم :

1
2
IF sales_in = 0 THEN
   RAISE no_sales;

اگر متغیر sales_in دارای مقدار صفر باشد به قسمت exception می‌رود.