DB2 for i에서도 LIMIT OFFSET
그 중 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 실행 결과의 스크린 샷
시작 코드가 6에서 10건 취득되어 있으므로 RPG로 사용할 수 있습니다.
i 내비게이션에서도 사용할 수 있었습니다만, STRSQL에서는 어째서인가 LIMIT만으로 OFFSET를 지정하면 에러가 되었습니다.
웹에서 사용할 때는 프레임 워크로 래핑되어 있기 때문에 의식하지 않습니다.
●i 내비게이션 실행 화면
● STRSQL 실행 화면
Reference
이 문제에 관하여(DB2 for i에서도 LIMIT OFFSET), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ushiday/items/9cda3e6037b7b857f68a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)