프레임워크에서 CLOB 조회를 지원하지 않는다..
사내시스템에서 에디터 기능이 포함된 게시판 화면을 추가하는 요구사항이 들어왔다.
현 사내시스템은 게시판 기능 없이 업무 처리 위주로 구성되어 있어서
처음으로 에디터(HTML) 기능이 포함된 게시판이 생기는 것이다 !
에디터로 글을 작성하면 태그 때문에 데이터가 길어져서
VARCHAR2 최대 크기인 4000bytes로는 턱없이 부족해서 협의 후 CLOB 를 사용하기로 했다.
그런데 ?
Oracle DB에서는 CLOB 컬럼을 지원 했지만
프레임워크에서 CLOB 데이터값을 지원하지 않아 IO에 담지 못하는 상황이 발생했다.
문의해보니 VARCHAR2 타입으로 변환헤서 화면단으로 넘기라고 답변 받았다.
그래서 CLOB 데이터를 VARCHAR2 4000bytes 이하 크기로 나눠서
여러 행으로 조회하고, 화면에서는 조회된 데이터를 붙여서 보여주는 방법으로 해결했다.
오라클 계층형 구조 CONNECT BY
오라클 계층형 구조 CONNECT BY 를 이용하여
CLOB 긴 데이터를 나눠서 여러행으로 조회할 수 있다.
* 주요 문법
- Connect By : 트리 형태의 구조로 질의를 수행하는 것
- Start with : 시작조건 (최상위 값이 시작하는 곳)
- Connect by prior : 조인조건
추가 예시는 아래 링크 참고 !
https://blog.naver.com/kbeeysk/221710976391
쿼리
SELECT TB.P_KEY
,TB.TITLE
,TB.CONTENTS
FROM
(
SELECT A.P_KEY
,A.TITLE
,DBMS_LOB.SUBSTR(TB.CONTENTS,1000,(LEVEL-1)*1000+1) CONTENTS
FROM BOARD_TABLE A
WHERE A.P_KEY = #P_KEY#
) TB
START WITH TB.P_KEY = #P_KEY#
CONNECT BY LEVEL <= CEIL(LENGTH(TB.CONTENTS/1000)
조회 테이블을 한번 감싸줘야 데이터가 안꼬여서 감싸줬고
START WITH를 꼭 해줘야 해당 게시글 데이터만 딱 나오니 꼭 해줘야 한다.
(안해주면 꼬일 수 있음..)
레벨은 4000bytes로 했다가 혹시나 초과될 것을 대비해서 안정적으로 1000bytes로 나눠주었다.
이렇게 여러행으로 조회 해 온 후 화면에서 붙여서 보여주니 잘 조회됐다 ~!
'IT > 개발이슈' 카테고리의 다른 글
Jackson ObjectMapper 로 가져온 JSON MAP으로 꺼내기 (0) | 2020.10.01 |
---|---|
ORA-01461 / CLOB 컬럼 4000byte 이상 INSERT UPDATE시 에러 발생 해결 (2) | 2020.10.01 |