Accueil du site > Les articles > Prototype de lecture de curseur SQL
Version à imprimer Enregistrer au format PDF

Prototype de lecture de curseur SQL

mardi 10 juillet 2007, par Serge Gomes Visites  1360

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)          

P.-S.

Pensez à remplacer BIBSERGE par votre bibliothèque