توضیحات

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

دستور

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

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 استفاده کرده است را مشاهده می‌کنیم:

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
تعریف کرده‌ایم:

no_sales EXCEPTION;

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

IF sales_in = 0 THEN
   RAISE no_sales;

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