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