Cursor names must be unique within the source.
... but you can define to independent cursor with different names and then
add an if statement around.
If the same fields are returned, but the difference between the 2 cursors is
an additional join, 2 independent cursors are necessary.
if var1 <> *blank;
   exec sql
     declare myCursor1 cursor for
       select FIELD2
       from FILE1
       where FIELD1 = :var1;
else;
   exec sql
     declare myCursor2 cursor for
       select FIELD2
       from FILE1
       inner join FILE2
       on FILE1.FIELD3 = FILE2.FIELD4
       where FIELD5 = var2;
endif;
....
If var1 <> *Blanks;
   Exec SQL Open myCursor1;
Else;
   Exec SQL Open myCursor2;
EndIf;
  DOU 1=0;
    If Var1 <> *Blanks;
      Exec SQL Fetch next from MyCursor1 into :YourDS;
   Else;
      Exec SQL Fetch next from MyCursor2 into :YourDS:
  Endif;
 .....     
If the difference is within the WHERE or ORDER BY clause, you might be able
to use a single cursor with case clauses.
Exec SQL Declare yourCursor Cursor For
   Select Fld1, Fld2, ... FldN
      From YourFile ....
      Where   FldX = Case When :Var1 > '' then :Var1 Else FldX End
             And FldY = Case When :Var2 <> 0 Then :Var2 Else FldY End
             ....
      Order By Case When :Sort = 1 Then Fld1 End, Case When :Sort = 1 Then
Fld3 End,
                       Case When :Sort = 2 Then Fld2 End, Case When :Sort =
2 Then Fld1 End Desc, 
                       ...
Mit freundlichen Grüßen / Best regards
Birgitta Hauser
"Shoot for the moon, even if you miss, you'll land among the stars." (Les
Brown)
"If you think education is expensive, try ignorance." (Derek Bok)
"What is worse than training your staff and losing them? Not training them
and keeping them!"
?Train people well enough so they can leave, treat them well enough so they
don't want to.? (Richard Branson)
-----Ursprüngliche Nachricht-----
Von: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] Im Auftrag von David
Gibbs
Gesendet: Wednesday, 30.11 2016 17:52
An: rpg400-l@xxxxxxxxxxxx
Betreff: SQL cursor defined two different ways?
Folks:
I'm wondering if this is possible ... so far the compiler is saying no.
I have a two different queries that return the same type of data.  I would
like to be able declare a cursor for the two different queries, conditional
on a parameter, and then just spin through the results.
Here's a mock-up of what I would like to do...
if var1 <> *blank;
   exec sql
     declare myCursor cursor for
       select FIELD2
       from FILE1
       where FIELD1 = :var1;
else;
   exec sql
     declare myCursor cursor for
       select FIELD2
       from FILE1
       inner join FILE2
       on FILE1.FIELD3 = FILE2.FIELD4
       where FIELD5 = var2;
endif;
When I compile, I get a message about a duplicate cursor.
Is there any way to accomplish what I want?
Thanks!
david
--
David Gibbs
midrange.com
* IBM Power Systems Champion
IBM i on Power Systems: For when you can't afford to be out of business!
I'm riding a metric century (100 km / 65 miles) in the American Diabetes
Association's Tour de Cure to raise money for diabetes research, education,
advocacy, and awareness.  You can make a tax deductible donation to my ride
by visiting 
http://lsteml.diabetessucks.net.  My goal is $6000 but any
amount is appreciated.
See where I get my donations from ... visit
http://lsteml.diabetessucks.net/map for an interactive map (it's a geeky
thing).
I may have diabetes, but diabetes doesn't have me!
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: 
http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
 
As an Amazon Associate we earn from qualifying purchases.