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 ».
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)