728x90
Oracle은 JSON 처리를 위한 다양한 내장 함수와 기능을 제공합니다. 비슷한 결과를 얻으려면 JSON_OBJECT, JSON_ARRAYAGG, 그리고 ROWNUM, OVER() 같은 SQL 기능을 활용할 수 있습니다.
Oracle에서는 아래와 같은 방식으로 JSON 객체를 생성할 수 있습니다.
1. Oracle 쿼리: JSON_OBJECT 및 JSON_ARRAYAGG 사용
Oracle에서는 JSON_OBJECT와 JSON_ARRAYAGG를 사용하여 JSON 결과를 생성합니다.
기본 쿼리 (페이징 처리 포함):
SELECT JSON_OBJECT(
'currentPage' VALUE :currentPage,
'totalPages' VALUE CEIL(COUNT(*) OVER() / :pageSize),
'totalItems' VALUE COUNT(*) OVER(),
'data' VALUE JSON_ARRAYAGG(
JSON_OBJECT(
'id' VALUE id,
'name' VALUE name,
'age' VALUE age
)
)
) AS result
FROM (
SELECT id, name, age
FROM users
ORDER BY id
) sub
WHERE ROWNUM BETWEEN (:currentPage - 1) * :pageSize + 1 AND :currentPage * :pageSize;
주요 포인트:
- JSON_OBJECT: JSON 객체를 생성합니다.
- JSON_ARRAYAGG: 여러 행을 배열로 변환합니다.
- COUNT(*) OVER(): 전체 데이터 개수를 계산하는 윈도우 함수입니다.
- 페이징 처리: ROWNUM을 활용하여 원하는 데이터 범위를 추출합니다.
728x90
2. MyBatis Mapper 작성
Oracle용으로 MyBatis에 맞게 쿼리를 작성합니다.
Mapper XML (UserMapper.xml):
http://mybatis.org/dtd/mybatis-3-mapper.dtd">
SELECT JSON_OBJECT(
'currentPage' VALUE #{currentPage},
'totalPages' VALUE CEIL(COUNT(*) OVER() / #{pageSize}),
'totalItems' VALUE COUNT(*) OVER(),
'data' VALUE JSON_ARRAYAGG(
JSON_OBJECT(
'id' VALUE id,
'name' VALUE name,
'age' VALUE age
)
)
) AS result
FROM (
SELECT id, name, age
FROM users
ORDER BY id
) sub
WHERE ROWNUM BETWEEN (#{currentPage} - 1) * #{pageSize} + 1 AND #{currentPage} * #{pageSize}
Mapper 인터페이스 (UserMapper.java):
package com.example.demo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserMapper {
String fetchUsersWithPaging(@Param("currentPage") int currentPage, @Param("pageSize") int pageSize);
}
728x90
3. 서비스 및 컨트롤러
서비스와 컨트롤러는 PostgreSQL 예제와 동일하게 작성할 수 있습니다.
4. 테스트 결과
Oracle에서도 동일한 JSON 결과를 얻을 수 있습니다.
요청:
GET http://localhost:8080/users/paged?currentPage=2&pageSize=5
결과:
{
"currentPage": 2,
"totalPages": 10,
"totalItems": 50,
"data": [
{
"id": 6,
"name": "Alice",
"age": 25
},
{
"id": 7,
"name": "Bob",
"age": 30
},
...
]
}
추가 참고
2024.11.30 - [SpringBoot 를 배워보자] - MyBatis를 활용한 유연하고 효율적인 동적 SQL(Json&Pageing) 전략
MyBatis를 활용한 유연하고 효율적인 동적 SQL(Json&Pageing) 전략
수백 개의 동적 SQL 조각을 효율적으로 관리하려면, 디렉토리 구조를 기능별로 구성하고, 공통 부분은 상위 디렉토리에 두는 방식이 적합합니다. 이를 MyBatis의 XML Mapper와 디렉토리 구조를 활용하
notion4570.tistory.com
Oracle JSON 기능은 버전에 따라 지원 여부가 다릅니다.
- JSON_OBJECT, JSON_ARRAYAGG: Oracle 12c 이상에서 지원.
- 구버전 사용 시: JSON 데이터를 수동으로 문자열로 조합하거나 다른 방법을 사용해야 할 수 있습니다.
Oracle에서 JSON 처리를 위한 최신 기능을 사용할 수 있는 환경인지 확인하는 것이 중요합니다.
728x90
'Oracle Database 강좌' 카테고리의 다른 글
오라클 메타데이터를 활용한 데이터베이스 관리 및 최적화 가이드 (1) | 2024.12.08 |
---|---|
Oracle 데이터를 PostgreSQL로 손쉽게 마이그레이션하는 ora2pg: 상세 가이드 (0) | 2024.12.02 |
Oracle의 DBMS_SQL 또는 V$SQL 뷰를 사용해 런타임에 실제 실행된 SQL을 추적하는 방법 (0) | 2024.11.28 |
테이블과 프로시져 혹은 함수과의 관계를 표현하는 레이아웃 (0) | 2024.11.26 |
APEX AI Assistant: 차세대 AI 어시스턴트의 가능성과 미래 (0) | 2024.11.26 |