Prototype de lecture de curseur SQL

Ce programme peut servir de modèle pour lire un curseur SQL.

Dans cet exemple j’utilise, pour gérer les erreurs SQL, un programme de service « SRVERRSQL ».

Voir article sur SRVERRSQL

Code source du modèle :

     H COPYRIGHT('Serge GOMES')
      // BNDSRVPGM(SRVERRSQL)
      /COPY BIBSERGE/PROTOTYPE,SRVERRSQL
     D OuvrirCurseur   PR              n
     D LireCurseur     PR              n
     D FermerCurseur   PR              n
     D MyLib           s             10a
     D MyFile          s             10a
     D Pstop           s               n   inz(*off)
      /free
       *inlr=*on;
       if OuvrirCurseur();
         Dow LireCurseur();
           // Boucle de lecture principale
          //  Suite des traitements...
         EndDo;
         FermerCurseur();
       EndIf;
       return;
      /end-free
      *--------------------------------------------------*
     P OuvrirCurseur   B
     D OuvrirCurseur   PI              n
      
     C/EXEC SQL
     c+ Set Option
     c+     Naming    = *Sys,
     c+     Commit    = *None,
     c+     UsrPrf    = *User,
     c+     DynUsrPrf = *User,
     c+     Datfmt    = *iso,
     c+     CloSqlCsr = *EndMod
     C/END-EXEC
     
     C/EXEC SQL
     C+ DECLARE C1 CURSOR FOR SELECT 
     C+ System_Table_Schema as library,
     C+ System_Table_Name as file FROM qsys2/systables
     C/END-EXEC
     
     C/EXEC SQL
     C+ Open C1
     C/END-EXEC
     
      /free
         if SqlStt='00000';
           return *on;
         Else;
           SqlErreur(sqlca:Pstop);
           return *off;
       EndIf;
      /end-free
     P OuvrirCurseur   E
      *-----------------------------------------------------------*
     P LireCurseur     B
     D LireCurseur     PI             n
     C/EXEC SQL
     C+ Fetch C1 into :MyLib, :MyFile
     C/END-EXEC
      /free
       if sqlstt='0000';
         Return *on;
       else;
         callp SqlErreur(sqlca);
         return *off;
       EndIf;
      /end-free
     P LireCurseur     E
      *-------------------------------------------------------------*
     P FermerCurseur   B
     D FermerCurseur   PI                   
     C/EXEC SQL
     C+ Close C1
     C/END-EXEC
      /free
         If sqlstt<>'00000';
         callp SqlErreur(sqlca);
       EndIf;
      /end-free
     P FermerCurseur   E 

 Pour compiler cet exemple il faut procéder en 2 temps

— Création du membre (opt 15 pdm)

CRTSQLRPGI ??OBJ(BIBSERGE/SQL_CURSOR)
?*SRCFILE(BIBSERGE/QRPGLESRC)
?*SRCMBR(SQL_CURSOR)
?*OBJTYPE(*MODULE)

— Création du programme

CRTPGM PGM(SQL_CURSOR)
BNDSRVPGM(BIBSERGE/SRVERRSQL)

Print Friendly, PDF & Email