728x90
반응형
SELECT
CLOBAGG(REPLACE(C.CAP_CTT,'|','') || ' ##### ' )
OVER (PARTITION BY A.MY_ARTCL_ID ORDER BY A.MY_ARTCL_ID RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
AS CAP_CTT
FROM TB_MY_ARTCL_CAP C LEFT OUTER JOIN TB_MY_ARTCL A ON A.MY_ARTCL_ID = C.MY_ARTCL_ID
WHERE A.INPUT_DTM BETWEEN TO_DATE ('20200501', 'YYYYMMDDHH') AND TO_DATE('20200709','YYYYMMDDHH');
쿼리부터.
CLOB 같은 대용량 텍스트를 listagg와 같은 방식으로 엮어서 저장하기 위한 쿼리임.
REPLACE 함수를 통해 '|' 문자를 '' 로 변환하고 || '나눌때 들어갈 문자열'을 CLOBAGG함수에 설정해준다.
이후의 OVER (PARTITION BY 는 엮은 데이터를 다시 한 번 그룹핑 하기에 유용한 함수이다.
analytic function or rankfunction으로 알려져있지만 윈도우 함수가 표준임.
import oracle.sql.CLOB;
import java.io.Reader;
public static ~ {
Map<String, Object> data = myArticleDAO.getMyArticleSearch2(my_artcl_id);
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
CLOB clob = (CLOB) data.get("ANC_MENT_CTT");
Reader reader = clob.getCharacterStream();
StringBuffer out = new StringBuffer();
char[] buff = new char[1024];
int nchars = 0;
while ((nchars = reader.read(buff)) > 0) {
out.append(buff, 0, nchars);
}
params.add(mapkey, out.toString());
}
:LONG 값에는 ~ 에러가 발생한다면
CLOB을 통한 INSERT 쿼리에 subquery가 있는지 확인해야 한다.
서브 쿼리를 제대로 인식하지 못하는 버전이 있음에 유의.
320x100
반응형
'DB' 카테고리의 다른 글
[DB] MySQL CURRENT_TIMESTAMP (0) | 2023.10.05 |
---|---|
[CURSOR PAGING] 커서 페이징처리. (2) | 2022.08.31 |
ORACLE DB DELETE / SHRINK SPACE (0) | 2022.02.28 |
[ERROR] Oracle dump / import (0) | 2022.02.08 |
[ERROR] insert all 쿼리 중 sequence 호출 시, 무결성 제약 조건 위배 (0) | 2022.02.04 |