>Hi All,
>
>I was curious to hear people's opinions on the
>following issue:
>
>In a PL/SQL procedure I have multiple exception
>handlers which share a
>considerable amount of code.  For example, they all
>typically display a
>message to the screen, shutdown a few open files,
>perform a rollback and
>raise the exception.  They all vary, however, at
>the begining.
>
>Is it preferable (or even allowed) to combine the
>common exception handling
>into a single exception?  I imagine it's preferred
>if only for the reason
>of improving readability and reducing the chances
>of slightly messing one
>up.  What is the best way to share exception code?
>
>Regards,
>     Mark.
>
>PS:  Is the below code even valid or is another
>approach required?
>
>BEGIN
>     <some code here - hopefully!>
>EXCEPTION
>     WHEN exc_case1 THEN
>          <something specific>
>          RAISE exc_common;
>
>     WHEN exc_case2 THEN
>          <something different>
>          RAISE exc_common;
>
>     WHEN exc_common THEN
>          <common exception code>
>
>     WHEN OTHERS THEN
>          <panic a little bit>
>END;
>

Mark,

   Generally speaking I believe that 'code factoring' is a good idea. Keep specific 
things to a minimum (eg assigning an error number and/or message).
 That said your example is wrong : in an exception handler, you cannot 'jump', by 
raising an exception, to a same-level code; the exception you rise goes up one level. 
I guess that a simple example will be clearer :

   If you have

      Exception
          when A then raise c;
          when B then raise c;
          when C then <action>

  If A occurs then <action> will not be performed, because exception C will be 
returned one level higher. The proper way to do it is

       begin
         ...
         begin
           ...
         exception
           when A then raise C;
           when B then raise C;
           when others then raise; -- make explicit what is
                                   -- implicit
         end;
       exception
          when C then <action>
          when others ten ...
       end;

HTH,

Stephane Faroult
Oriole
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Stephane Faroult
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- 858-538-5051 http://www.fatcity.com
San Diego, California        -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to