مارا دنبال کنید : 

توضیحات

زمانی که exception اتفاق افتاده است ولی هیچ‌کدام از exception‌های تعریف شده توسط برنامه‌نویس یا اوراکل نیست می‌توان از دستور کلی when others استفاده کرد.

دستور

اکنون به دستور استفاده when others در تابع و پروسیجر می‌پردازیم:

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
42
43
44
45
CREATE [OR REPLACE] PROCEDURE procedure_name
   [ (parameter [,parameter]) ]
IS
   [declaration_section]
 
BEGIN
   executable_section
 
EXCEPTION
   WHEN exception_name1 THEN
      [statements]
 
   WHEN exception_name2 THEN
      [statements]
 
   WHEN exception_name_n THEN
      [statements]
 
   WHEN OTHERS THEN
      [statements]
 
END [procedure_name];
CREATE [OR REPLACE] FUNCTION function_name
   [ (parameter [,parameter]) ]
   RETURN return_datatype
IS | AS
   [declaration_section]
 
BEGIN
   executable_section
 
EXCEPTION
   WHEN exception_name1 THEN
      [statements]
 
   WHEN exception_name2 THEN
      [statements]
 
   WHEN exception_name_n 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
23
24
25
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 DUP_VAL_ON_INDEX THEN
      raise_application_error (-20001,'You have tried to insert a duplicate order_id.');
 
   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;