Hi Mike Krebs,
Thanks a lot for your valuable suggestions 
I got my solution and its working fine.
Best Regards,
Srinivas
-----Original Message-----
From: midrange-l-bounces@xxxxxxxxxxxx
[mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of Mike Krebs
Sent: Friday, August 24, 2007 4:29 AM
To: 'Midrange Systems Technical Discussion'
Subject: RE: SQL QUERY
One more problem I can able to print only one record
You still have more problems than one, but glad you made it this far.
Code:
    FDSPPF     IF   E           K DISK
When you use SQL to do your file input, you wouldn't ordinarily code an
F
spec for the file. SQL doesn't use it and you aren't using it in your
program. If you need the fields defined for some other purpose, use and
externally described data structure.
    DDAT1             DS
    DBYY                      1      2
    DBMM                      4      5
    DBDD                      7      8
    C*
    DDAT2             DS
    DEYY                      1      2
    DEMM                      4      5
    DEDD                      7      8
    C                   EXFMT     FIRST
    C                   MOVE      FDATE         DAT1
    C                   MOVE      TDATE         DAT2
    C*
    C/EXEC SQL
    C+ DECLARE A DYNAMIC SCROLL CURSOR FOR SELECT NAME FROM DSPPF
WHERE
    C+ FYY <= :BYY AND FYY >= :EYY AND FMM <= :BMM AND FMM >= :EMM AND
    C+ FDD <= :BDD AND FDD >= :EDD
    C/END-EXEC
As explained in other posts, this probably is not doing what you expect
if
you are using different years or months. It looks like you are getting
YY-MM-DD from the screen. You should probably get used to using real
date
data types to do comparisons (it is MY preference over using strings or
numbers that look like dates). You could easily change the screen fields
to
real dates with something like this:
      * define date fields
     d fromDate        s               d   datfmt(*iso)           
     d toDate          s               d   datfmt(*iso)           
      * convert screen fields to dates
     c                   eval      fromDate = %date(fdate:*ymd)   
     c                   eval      toDate   = %date(tdate:*ymd)
Then change the file fields to real dates in the sql select (substitute
for
your select above):
SELECT NAME
FROM   DSPPF
WHERE  DATE(CASE 
              WHEN FYY > 40 THEN '19'
              ELSE '20'
            END
            ||DIGITS(FYY)
            ||'-'
            ||DIGITS(FMM)
            ||'-'
            ||DIGITS(FDD))
        BETWEEN :fromDate
                AND :toDate  
    C/EXEC SQL WHENEVER NOT FOUND GO TO DONE1
    C/END-EXEC
This is largely preference and discipline, but my SQL teacher led me to
believe that "whenevers" were used to catch global errors. Most loops
(using
fetch) would check for SQLStt (SQLState) or SQLCOD (SQLCode). If it was
my
code, I would take the "10" loop off and "dow *on" (or DOU sqlstt =
'02000'
or some other looping construct). Then, after the fetch, check the
sqlstt
for end of file or other error. There is a lot of information about
SQLStt
on the web including some very good error message checks.
    C*
    C                   Z-ADD     1             I                 2 0
    C                   DOW       I <= 10
    C/EXEC SQL
    C+ FETCH NEXT FROM A INTO :NAME1
    C/END-EXEC
    C*
      *
     C                   SELECT
      * end of file 
     C                   WHEN       %subst(sqlstt:1:2) = '02'
     C                   LEAVE
     C                   WHEN       %subst(sqlstt:1:2) <> '00'
     C     'SQLERR'      DSPLY
     C                   ENDSL
Good luck, embedded SQL can be very powerful and fun!
Mike Krebs
As an Amazon Associate we earn from qualifying purchases.