Tony is right, that the IF/GOTO constructs can be dangerous, but in this
case, Karen is using a "Structured GOTO" to get around limitations of WHILE
loops. If you look at Label EndCursor, you will see that there is a GOTO
GetCursor just before it. There is still only one way in the code to get to
the WRITE 'I am done!' statement. IF/GOTO becomes dangerous and hard to
maintain when you have multiple ways to get to a block of code.

Bill


On Fri, Mar 21, 2014 at 9:14 AM, Dennis McGrath <[email protected]> wrote:

> Also note, RStyle recognized two special comments --indent and --outdent
> to make goto loops format in a readable structure.
> It even enforces that they be paired.
> As far as RStyle is concerned, they are part of the code structure.
>
> DROP CURSOR C1
> DECLARE C1 CURSOR FOR SELECT  ....... blah blah blah
> OPEN C1
>
> LABEL GetCursor
> --indent
>   FETCH C1 INTO ..... blah blah blah
>   IF SQLCODE = 100 THEN
>     GOTO EndCursor
>   ENDIF
>   -- do all your processing here
>   GOTO GetCursor
> --outdent
> LABEL EndCursor
> WRITE 'I AM DONE!'
> RETURN
>
>
> Dennis McGrath
> Software Developer
> QMI Security Solutions
> 1661 Glenlake Ave
> Itasca IL 60143
> 630-980-8461
> [email protected]
> From: [email protected] [mailto:[email protected]] On Behalf Of Dennis
> McGrath
> Sent: Friday, March 21, 2014 7:59 AM
> To: RBASE-L Mailing List
> Subject: [RBASE-L] - Re: Thanks to someone for the code!
>
> Tony,
>
> Large while loops tend to be difficult to maintain as it is very easy to
> write something that will crash the loop.
>
> Also, I have had while loops that absolutely refused to trace making
> debugging impossible.
>
> Using the GOTO loop method results in code that may run a little slower,
> but is easier to maintain and not as fragile.
>
> I use while loops for small tasks that iterate a great many times, and are
> not likely to change over time.
>
> Otherwise, my time is better spent writing code that is less time
> intensive to debug and maintain.
>
> I'm sure there are those folks who will violently disagree with me, and
> that is OK too.
>
>
> Dennis McGrath
> Software Developer
> QMI Security Solutions
> 1661 Glenlake Ave
> Itasca IL 60143
> 630-980-8461
> [email protected]
> From: [email protected] [mailto:[email protected]] On Behalf Of Tony
> IJntema
> Sent: Friday, March 21, 2014 6:40 AM
> To: RBASE-L Mailing List
> Subject: [RBASE-L] - Re: Thanks to someone for the code!
>
> Karen,
>
> Maybe not relevant, but why don't you use the while-endwhile construction.
> If statements are handy, but also a little dangerous
> 10 if statements in a program will result in 1024 paths through your
> program
>
> Tony
>
> DROP CURSOR c1
> DECLARE c1 CURSOR FOR SELECT  ....... blah blah blah
> OPEN c1
> FETCH c1 INTO ..... blah blah blah
> while SQLCODE <>  100 THEN
>        -- do all your processing here
>
> FETCH c1 INTO ..... blah blah blah
> endwhile
> WRITE 'I AM DONE!'
>
> From: [email protected] [mailto:[email protected]] On Behalf Of Karen
> Tellef
> Sent: donderdag 20 maart 2014 23:18
> To: RBASE-L Mailing List
> Subject: [RBASE-L] - Re: Thanks to someone for the code!
>
> Well then, I'm guessing it was either Dennis or Alastair!  Or both!
>
> Karen
>
>
>
> -----Original Message-----
> From: Alastair Burr <[email protected]>
> To: RBASE-L Mailing List <[email protected]>
> Sent: Thu, Mar 20, 2014 2:21 pm
> Subject: [RBASE-L] - RE: Thanks to someone for the code!
> And I, for one, have been using it for many of those years.
>
> Cheers, Dennis,
> Regards,
> Alastair.
>
> From: Dennis McGrath
> Sent: Thursday, March 20, 2014 7:01 PM
> To: RBASE-L Mailing List
> Subject: [RBASE-L] - RE: Thanks to someone for the code!
>
> Perhaps someone else shared that with you but I'm been preaching that
> style for mucho many years.
>
> Dennis McGrath
> Software Developer
> QMI Security Solutions
> 1661 Glenlake Ave
> Itasca IL 60143
> 630-980-8461
> [email protected]
> From: [email protected] [mailto:[email protected]] On Behalf Of Karen
> Tellef
> Sent: Thursday, March 20, 2014 1:52 PM
> To: RBASE-L Mailing List
> Subject: [RBASE-L] - Thanks to someone for the code!
>
> Probably a year ago I asked for recommendations of how to use alternative
> code for a cursor that had to go through 50,000 rows of data, run hundreds
> of lines of code per record, and would periodically lock up.  I got a
> couple examples, and I picked this one as being the easiest to follow, the
> simplest and best of all, IT WORKS!   I forgot who gave it to me, but thank
> you!   And perhaps this will help someone else.
>
> Karen
>
> DROP CURSOR c1
> DECLARE c1 CURSOR FOR SELECT  ....... blah blah blah
> OPEN c1
>
> LABEL GetCursor
>
> FETCH c1 INTO ..... blah blah blah
>
> IF SQLCODE = 100 THEN
>   GOTO EndCursor
> ENDIF
>
> -- do all your processing here
>
> GOTO GetCursor
>
>
> LABEL EndCursor
> WRITE 'I AM DONE!'
>
>
> RETURN
>

Reply via email to