先日IBM iのTR3(テクノロジーリフレッシュ)が、発表されリリースされました。
その中で、SQL文にてLIMIT OFFSETが使える様になったと有ったので、試してみました。
サンプルは以下のソースです

SQLFET1.rpgle
     H DATEDIT(*YMD)
     H COPYRIGHT('(C) CHUBU SYSTEM CO,.LTD 1996 - ')
      /IF DEFINED(*CRTBNDRPG)
     H DFTACTGRP(*NO) ACTGRP(*CALLER)
      /ENDIF
     D*-----<<メインプロシージャ・プロトタイプ定義>>-----*
     D*-----<<サブプロシージャ・プロトタイプ>>-----*
     D OPEN_CURSOR     PR              N
     D FETCH_CURSOR    PR              N
     D CLOSE_CURSOR    PR              N
     D*-----<<変数>>-----*
     D******************************************************************
     D*
     C*-‚-----------------------------------------------------------------*
     C*-‚--------<<  FREE FORMAT                                 >>-------*
     C*-‚-----------------------------------------------------------------*
      /FREE

           // 1行ずつのFETCH (NEXT:順読み)
           IF NOT OPEN_CURSOR() ;
              // OPEN ERROR DEFINED
               DSPLY ('CURSOR OPEN ERROR')  ;
           ELSE ;
               DOW FETCH_CURSOR() ;
               ENDDO ;
               CLOSE_CURSOR() ;
           ENDIF ;

           *INLR = *ON ;
           RETURN      ;

      /END-FREE

     P****************************************************************
     P** < OPEN_CURSOR  > :カーソルオープン処理                   **
     P**------------------------------------------------------------**
     P**          RETURN  : *ON=正常オープン,*OFF=エラー        **
     P**------------------------------------------------------------**
     P****************************************************************
     P OPEN_CURSOR     B
     D OPEN_CURSOR     PI              N
     D*<変数>
     D RETURN_VAR      S               N
      /FREE

              //カーソル定義
              EXEC SQL        DECLARE C1 CURSOR FOR
                              SELECT *
                              FROM USHIDA/ITEM
                              ORDER BY CODE
                              LIMIT 10 OFFSET 5 ;

              //カーソルオープン
              EXEC SQL        OPEN C1           ;
              IF SQLSTT = '00000' ;   // 00000:操作正常終了
                   RETURN_VAR = *ON ;
              ELSE  ;
                   RETURN_VAR = *OFF;
              ENDIF ;

              RETURN RETURN_VAR ;

      /END-FREE
     P                 E
     P****************************************************************
     P** < FETCH_CURSOR > :カーソル読取処理                       **
     P**------------------------------------------------------------**
     P**          RETURN  : *ON=正常読取,*OFF=EOF又はエラー  **
     P**------------------------------------------------------------**
     P****************************************************************
     P FETCH_CURSOR    B
     D FETCH_CURSOR    PI              N
     D*<変数>
     D RETURN_VAR      S               N
     D ROW           E DS                  EXTNAME(ITEM)
     D                                     QUALIFIED
     D LINE            S             40A
      /FREE

              //カーソル読み込み
              EXEC SQL        FETCH NEXT FROM C1 INTO :ROW ;
              SELECT ;
              WHEN SQLSTT = '00000' ;   // 00000:操作正常終了
                  LINE =  %CHAR(ROW.CODE) + ' ' +  ROW.NAME    ;
                  DSPLY ( LINE  )  ;
                  RETURN_VAR = *ON  ;
              WHEN SQLSTT = '02000' ;   // 02000:EOF
               // DSPLY (SQLSTT)  ;
                  RETURN_VAR = *OFF ;
              OTHER ;                           //
               // DSPLY (SQLSTT)  ;
                  RETURN_VAR = *OFF ;
              ENDSL ;

              RETURN RETURN_VAR ;

      /END-FREE
     P                 E
     P****************************************************************
     P** < CLOSE_CURSOR > :カーソルクローズ処理                   **
     P**------------------------------------------------------------**
     P**          RETURN  : *ON=正常クローズ.*OFF=エラー        **
     P**------------------------------------------------------------**
     P****************************************************************
     P CLOSE_CURSOR    B
     D CLOSE_CURSOR    PI              N
     D*<変数>
     D RETURN_VAR      S               N
      /FREE
              //カーソルクローズ
              EXEC SQL        CLOSE C1          ;
              SELECT ;
              WHEN SQLSTT = '00000' ;   // 00000:操作正常終了
                  RETURN_VAR = *ON  ;
              OTHER ;                           //
                  RETURN_VAR = *OFF ;
              ENDSL ;

              RETURN RETURN_VAR ;

      /END-FREE
     P                 E 

●SQLRPG実行結果の画面ショット
2015-12-01_134150.png

開始コードが6から10件取得出来ているので、RPGで使えてます。
iナビでも使えましたが、STRSQLでは何故かLIMITのみでOFFSETを指定するとエラーになりました。
Webで使用する時は、フレームワークでラップされているため、意識しないですが。

●iナビの実行画面
2015-12-01_135036.png

●STRSQLの実行画面
2015-12-01_135155.png