A varying-list SELECT statement is one that retrieves data items of varying number and format. Because the number and type of data items are not known, you cannot define host variables in advance.
However, by including the SQLDA in your program, you can use PREPARE to define a SELECT statement and follow it with a DESCRIBE statement. This process inserts the data item information into the SQLDA, which your program can use to execute a SELECT statement. Likewise, record fetches are performed using the SQLDA.
To issue a varying-list SELECT statement:
The following program excerpt shows how to execute a varying-list SELECT statement dynamically.
* include SQLDA copybook. 
     EXEC SQL 
         INCLUDE SQLDA
     END-EXEC
* assign value to variable sqlcmd. 
     MOVE 'select * from employee where dept="1050"' 
                                                   TO sqlcmd
* prepare SELECT command. 
     EXEC SQL 
         PREPARE q1 FROM :sqlcmd 
     END-EXEC
* allocate space for an SQLDA ... 
     MOVE 20 TO SQLN
* describe SELECT command. 
     EXEC SQL 
         DESCRIBE q1 INTO SQLDA 
     END-EXEC
* make sure SQLDA is big enough. 
     IF (SQLN <= SQLD) 
     	   PERFORM ...
             ... 
             MOVE SQLD TO SQLN. 
             EXEC SQL 
                 DESCRIBE q1 INTO SQLDA 
             END-EXEC 
         END-PERFORM
     END-IF
* analyze results of DESCRIBE. 
...
* allocate storage to hold one row of the result. ...
* declare cursor for SELECT command. 
     EXEC SQL 
         DECLARE c1 CURSOR FOR q1 
     END-EXEC
* open cursor. 
     EXEC SQL 
         OPEN c1 
     END-EXEC
* fetch data into program variables EMPNO, LASTNME and 
* FIRSTNME. 
     EXEC SQL 
         FETCH c1 USING DESCRIPTOR SQLDA 
     END-EXEC
* display results fetching next record as long as there 
* is one. 
     PERFORM UNTIL SQLCODE <> 0 
         DISPLAY ... 
         EXEC SQL 
             FETCH c1 USING DESCRIPTOR SQLDA 
         END-EXEC 
     END-PERFORM 
     DISPLAY 'END OF LIST'.
* close cursor. 
     EXEC SQL 
         CLOSE c1 
     END-EXEC