RE: PL/SQL best practices ? How to go to end of loop (i.e. next record)

  • From: "Joel Slowik" <jslowik@xxxxxxxxx>
  • To: "Joel Slowik" <jslowik@xxxxxxxxx>, <michaeljmoore@xxxxxxxxx>, <oracle-l@xxxxxxxxxxxxx>
  • Date: Wed, 9 Feb 2011 16:55:27 -0500

Let me re-state what I just said,

 

I shouldn't have said I would never use a goto. I should have said - I
will not be using goto's anytime in the near future unless something or
someone has a compelling reason for me to do so.

 

I am open-minded after all

 

From: Joel Slowik 
Sent: Wednesday, February 09, 2011 4:53 PM
To: michaeljmoore@xxxxxxxxx; oracle-l@xxxxxxxxxxxxx
Subject: RE: PL/SQL best practices ? How to go to end of loop (i.e. next
record)

 

I would never use a goto - that's a very messy way to write code - imho
is all.

 

From: oracle-l-bounce@xxxxxxxxxxxxx
[mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of Michael Moore
Sent: Wednesday, February 09, 2011 4:45 PM
To: oracle-l@xxxxxxxxxxxxx
Subject: PL/SQL best practices ? How to go to end of loop (i.e. next
record)

 

I can think of many ways to do this but is there a definitive best
practice?

I'm sure there must be articles on this somewhere, so links as well as
comments are appreciated. 

 

BEGIN

for cur1 in (SELECT bla bla bla)

    LOOP

 

     If something_I_dont_like then skip to next record in cur1;

 

     Lots and lots of code goes here. 

 

    END  LOOP;

END;

 

Some options:

1) You could set up a label and use a goto.

2) You could set up an inner block and use RAISE to break out:

 

3) You could do something like :

 

BEGIN

for cur1 in (SELECT bla bla bla)

    LOOP

         <<process_this_record>>

         FOR c2 IN (SELECT * FROM DUAL) -- creates an exitable one-time
loop

         LOOP

 

            If something then 

                   exit process_this_record;

 

              Lots and lots of code goes here. 

 

         END LOOP process_this_record;

    END  LOOP;

END;

 

4) You could just nest IF statements like:

 

BEGIN

for cur1 in (SELECT bla bla bla)

    LOOP

         IF keep_processing_this_transaction THEN

         BEGIN

               Lots and lots of code goes here.

         END IF;

    END  LOOP;

END;

 

So, what is the best way?

 

Regards,

Mike




Confidentiality Note: This electronic message transmission is intended only for 
the person or entity to which it is addressed and may contain information that 
is privileged, confidential or otherwise protected from disclosure. If you have 
received this transmission, but are not the intended recipient, you are hereby 
notified that any disclosure, copying, distribution or use of the contents of 
this information is strictly prohibited. If you have received this e-mail in 
error, please contact Continuum Performance Systems at {203.245.5000} and 
delete and destroy the original message and all copies.

Other related posts: