깜놀하는 해므찌로

Egov Spring MyBatis MySQL Limit 페이징 처리 / Oracle ROWNUM 본문

IT

Egov Spring MyBatis MySQL Limit 페이징 처리 / Oracle ROWNUM

agnusdei1207 2022. 7. 8. 08:30
반응형
SMALL

- mybatis를 사용하다가 이번에 oracle을 사용하면서 페이징처리하는 부분이 달라서 정리해 보았습니다.

- 기존에는 LIMIT를 활용하여 페이징처리를 해주었는데 oracle에서는 LIMIT를 사용할 수 없었습니다.

- Oracle은 LIMIT 대신 ROWNUM을 활용하여 페이징처리를 해줄 수 있습니다.

 

Mysql 예시

   SELECT PA.*
        , F_USER_INFO(PA.RGTR_SN, 'USER_NM')                            rgtrNm
        , (SELECT SITE_NM  FROM T_SITE_MNG WHERE SITE_SN = PA.SITE_SN)  siteNm
        , (SELECT PRJ_NM  FROM T_PRJ_MNG WHERE PRJ_SN = PA.PRJ_SN )     prjNm
     FROM (SELECT TSJ.JOB_DMND_SN                                       jobDmndSn
                , TSJ.TTL_NM                             			    ttlNm         
             FROM T_SRVCDMND_JR											TSJ
            WHERE TSJ.USE_YN    = 'Y'
              AND (TSJ.JOB_SE_CD != 'JSE01' AND TSJ.JOB_SE_CD != 'JSE03' AND TSJ.JOB_SE_CD != 'JSE08')
            ORDER BY TSJ.JOB_DMND_SN DESC
            LIMIT  #{firstRecordIndex} , #{recordCountPerPage}) PA

 

1. LIMIT 를 활용해 원하는 개수를 설정할 수 있다.

 

Oralcle 예시

 SELECT PB.*
      , TO_CHAR(PB.REG_DT,'YYYY.MM.DD')                                 regDt         
      , (SELECT USER_ID FROM T_USER_MNG WHERE USER_SN = PB.rgtrSn)      rgtrId       
      , F_USER_NM(PB.rgtrSn)                                            rgtrNm   
   FROM (SELECT	PA.*
              , ROWNUM                                                  RNUM
           FROM	(SELECT EST_SN                                          estSn     
                      , EST_SE                                          estSe         
  				   FROM T_EST A
                  WHERE USE_YN  ='Y'
                    AND EST_SE  ='prm'
                  ORDER BY EST_SN DESC) PA 
           WHERE ROWNUM <= #{firstRecordIndex} + #{recordCountPerPage} ) PB
   WHERE RNUM > #{firstRecordIndex}

1. ROWNUM 을 활용하기 위해 다시 한 번 subQuery 로 감싸서 사용할 수 있다.

반응형
LIST