mysql과 oracle의 paging
#mysql
<if test="startRowNum != null and endRowNum != null">
LIMIT #{startRowNum}, #{endRowNum}
</if>
mysql의 limit을 사용하면 보통 limit 0, 15 이런식으로 사용한다.
0은 어디서부터 읽을 위치를 나타내고, 15는 몇 row를 읽을 것인가를 나타낸다.
그래서 limit을 쓸데는 앞의 0만 0, 15, 30....이런식으로 증가하게 되면
0부터 15개, 15부터 15개, 30부터 15개 이런식으로 페이징처리를 도와준다.
하지만 오라클의 rownum을 사용하게 되면 보통 between을 사용하게 되는 기존의 것을 그대로 쓰면
rownum between 0 and 15 이런식으로 되서 처음1장만 제대로 되고
rownum between 15 and 15, rownum between 30 and 15 이런식으로 처리가된다.
공통코드로 페이징 처리를 관리한다면 아래와 같이 쉽게 변환이 가능하다.
#공통
<!-- Limit Header -->
<sql id="sqlPagingHeader">
<if test="startRowNum != null and endRowNum != null">
SELECT *
FROM (
SELECT rownum rnum, m.*
FROM (
</if>
</sql>
<!-- Limit Footer -->
<sql id="sqlPagingFooter">
<if test="startRowNum != null and endRowNum != null">
) m
WHERE rownum <![CDATA[<=]]> (#{endRowNum} + #{startRowNum})
)
WHERE rnum <![CDATA[>]]> #{startRowNum}
</if>
</sql>
이런식으로 사용 할 수 있다.
#oracle
<select id="get..." parameterType="map" resultType="vo...">
<include refid="sql.oracle.comm.sqlPagingHeader"/>
select 쿼리
<include refid="sql.oracle.comm.sqlPagingFooter"/>
</select>
'[DataBase] > Oracle' 카테고리의 다른 글
마이바티스 이용시 insert into select (0) | 2017.05.21 |
---|---|
Insert시 Key 관련 에러 - Error getting generated key or setting result to parameter object. (0) | 2017.01.16 |
오라클 예약어를 DTO에서 사용하기 (0) | 2017.01.12 |
ERROR - ORA-00923: FROM 키워드가 필요한 위치에 없습니다. (0) | 2017.01.11 |
ojdbc maven 등록 (0) | 2017.01.11 |
댓글