로그저장때문에 한컬럼(CLOB)에 ',' 로 구분하여 사용자 데이터가 저장됩니다. 예를들어
'A홍길동,B고소영,C장동건,D박찬호' 등등등 1명~만명도 넘게 들어갈수 있습니다 그래서 CLOB형식인대요.
문제는 조회도 이루어저야합니다. "," 별로 짤라서 행으로 만들려고합니다.
A,홍길동
B,고소영
C,장동건
D,박찬호 이런식으로요.
그래서
SELECT distinct regexp_substr(TO_CHAR(SUBSTR(TXT, 1, 4000)), '[^|]+', 1, LEVEL) TXT
FROM (SELECT 'A|B|C|D' TXT FROM dual) A
CONNECT BY LEVEL <= length(regexp_replace(A.TXT, '[^|]+',''))+1;이걸 참고로해서 구상할려고했는대
Data is too long to be converted to CHAR/VARCHAR/RAW data type.라는 오류가 납니다.
번역해보면
데이터가 너무 커서 CHAR / VARCHAR / RAW 데이터 유형으로 변환 할 수 없습니다. 라고나오는대
이럴경우 해결방법은 어떤게있을까요?
아 우선 clob에서 VARCHAR 로형변형 해야한다고해서 TO_CHAR(SUBSTR(LOG_DETL_CONT, 1, 4000)) 이런형식으로 변형하려고 했습니다.
정답을못찾으면 조회해와서자바에서 짤라도 되긴하는대 자바에서 하면 번잡스러울거같아서 쿼리에서 해결할 수 있다면 쿼리로 해결하고 싶어서요. 고수님들 가르침 부탁드립니다.
1. TO_CHAR 구문이 문제네요. --> TO_CHAR 와 SUBSTR 빼보세요.
2. Distinct 는 왜 쓸까요? --> 불필요합니다. 중복된다면? 뭔가 잘못 적용하신 듯.
3. Connect By Level 을 이용한 행복제시 유의사항 확인하세요. --> http://gurubee.net/article/55635