Posts

12 FETCH and sub-procedures

**FREE ctl-opt ActGrp(*CALLER) DftActGrp(*NO); //********** Prototypes for Subprocedures ********** dcl-pr OpenCursor  ind end-pr; dcl-pr FetchCursor ind end-pr; dcl-pr CloseCursor ind end-pr; //********** Stand Alones ********** dcl-s MyLib char(10); dcl-s MyFile char(10); //********** Main Loop ********** *inlr=*on; if not OpenCursor();          // perform error routine to alert the troops Else;    Dow FetchCursor();        // putting the fetchcursor on the do loop allows the user of            // iter, and thus iter will not perform an infinite loop            // normal processing here...    EndDo;    CloseCursor(); EndIf; return; //********** OpenCursor ********** dcl-proc OpenCursor; dcl-pi   OpenCursor like(ReturnVar) end-pi; dcl-s ReturnVar ind; // The immediately following /EXEC SQL is SQL's version...

11 Using CURSOR and FETCH into multiple host DS

**FREE ctl-opt option(*nodebugio:*srcstmt); dcl-ds FILEAx extname('FILEA') qualified end-ds; dcl-ds FILEBx   extname('FILEB  ') qualified end-ds; dcl-ds FILEAds extname('FILEA') end-ds; dcl-ds FILEBds   extname('FILEB'  );        FIELDA_     extfld('FIELDA');        FIELDB_    extfld('FIELDB'); end-ds; dcl-c SqlEof const('02000'); exec sql declare c1 cursor for          select a.*,b.*          from pgctrans/FILEA a          left outer join pgctrans/FILEB b          on a.FIELDA=b.FIELDA and a.FIELDB=b.FIELDB          where b.FIELDX>' '          order by a.FIELDA, b.FIELDX; exec sql open c1; exec sql fetch c1 into :FILEAx, :FILEBx; if sqlStt <> sqlEof;    FILEAds = FILEAx;    FILEBds = FILEBx...

08 Using CURSOR and FETCH into host DS with OCCUR

10 Single SQL command static with AVG, MAX

**FREE dcl-s MaxSize zoned(15:0); dcl-s AvgSize zoned(15:0); exec sql select avg(odobsz), max(odobsz) into :avgsize, :maxsize from pfdata; if sqlstt <> '00000'; // Error     // handle the error endif; *inlr=*on;

09 Using CURSOR n PREPARE with FETCH into host DS

**FREE dcl-s SzParm zoned(5:0); dcl-s SQLStmt char(100) inz('Select * from FILEA where FIELDA=? and FIELDB>?'); dcl-ds InRec extname(FILEA) end-ds; dcl-pi *n;        parm1 char(5);        parm2 char(5); end-pi;       szparm = %int(parm2) exec sql Prepare s1 from :SQLStmt; exec sql DECLARE C1 CURSOR FOR S1; exec sql open c1 using :parm1, :szparm; exec sql fetch c1 into :inrec;       dou sqlstt <> '00000'    // Do something with each record    exec sql fetch c1 into :inrec; enddo;       exec sql close c1; *inlr=*on;

07 Using CURSOR and FETCH into host DS

**FREE dcl-ds InRec extname(FILEA) end-ds; exec sql declare c1 cursor for select * from FILEA; exec sql open c1; exec sql fetch c1 into :inrec; dou sqlstt <> '00000';    //  Do something with each record    exec sql fetch c1 into :inrec; enddo; exec sql close c1; *inlr=*on;

06 Using CURSOR and FETCH into host var

**FREE Dcl-ds InRec extname(FILEA) end-ds; dcl-s FIELDA2 like(FIELDA); dcl-s FIELDB2 like(FIELDB); exec sql declare c1 cursor for select FIELDA, FIELDB from FILEA; exec sql open c1; exec sql fetch c1 into :FIELDA2, :FIELDB2; dou sqlstt <> '00000';     //  Do something with each record     exec sql fetch c1 into :FIELDA2, :FIELDB2; enddo; exec sql close c1; *inlr = *on;