강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

ciw님의 프로필 이미지
ciw

작성한 질문수

MYSQL -> ORACLE로

작성

·

226

0

<sql id="search">

<if test="type=='writer'">

where writer like concat(concat('%', #{keyword}), '%')

</if>

<if test="type=='title'">

where title like concat(concat('%', #{keyword}),'%')

</if>

<if test="type=='content'">

where content like concat(concat('%', #{keyword}), '%')

</if>

</sql>

<select id="getList" resultType="kr.bit.entity.Board" parameterType="kr.bit.entity.Criteria">

select * from tblBoard

<include refid="search"/>

order by boardGroup desc, boardSequence asc

limit #{pageStart}, #{perPageNum}

</select>

 

전에

"select * from tblBoard

<include refid="search"/>

order by boardGroup desc, boardSequence asc

limit #{pageStart}, #{perPageNum} "

에 대해 질문 했었는데

select * from tblBoard

<include refid="search"/>

order by boardGroup desc, boardSequence asc

limit #{pageStart}, #{perPageNum}

 

오라클로 바꾸는 문법을 알고 싶습니다.

 

<include refid="search"/> 포함이 되는 경우가 생겨서 어렵습니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

ciw님께서 작성하신 MyBatis의 XML 구문을 Oracle의 문법으로 변환하는 것에 대해서 질문해주신 것으로 이해했습니다. MySQL에서 사용하는 LIMIT 키워드는 Oracle에서는 ROWNUM이나 페이징을 위해 OFFSETFETCH NEXT를 사용해야 합니다.

MySQL 쿼리:

select * from tblBoard
where ...
order by boardGroup desc, boardSequence asc
limit pageStart, perPageNum

Oracle로 변환한 쿼리는 다음과 같습니다:

SELECT * FROM
  (SELECT a.*, ROWNUM rnum FROM
    (SELECT * FROM tblBoard
    -- <include refid="search"/> 해당 부분은 검색 조건의 동적 SQL 삽입
    ORDER BY boardGroup DESC, boardSequence ASC) a
  )
WHERE rnum > pageStart AND rnum <= (pageStart + perPageNum)

Oracle 12c 이상 버전에서는 더 새로운 방식도 사용 가능합니다:

SELECT * FROM tblBoard
-- <include refid="search"/> 해당 부분은 검색 조건의 동적 SQL 삽입
ORDER BY boardGroup DESC, boardSequence ASC
OFFSET pageStart ROWS FETCH NEXT perPageNum ROWS ONLY

<include refid="search"/>는 MyBatis의 기능을 활용하여 쿼리 내에 다른 XML 내에서 정의된 SQL을 포함하는 방법입니다. Oracle 문법으로 변환 시에도 해당 부분은 변하지 않고 그대로 유지됩니다.

Oracle 쿼리에서 페이징 처리가 필요할 때는 ROWNUM을 사용하는 전통적인 방법이 있고, Oracle 12c 이상에서는 OFFSETFETCH NEXT를 사용하는 방법이 있으니, 사용하시는 Oracle 데이터베이스 버전에 맞게 적절한 방식을 선택하여 사용하시면 됩니다.

ciw님의 프로필 이미지
ciw

작성한 질문수

질문하기