본문 바로가기
[DataBase]/Oracle

mysql과 oracle의 paging

by control+c 2017. 1. 13.
반응형

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>




반응형

댓글