clob 형식 형변환질문입니다. 0 2 1,410

by 돼지뚱뙝이 [SQL Query] [2019.07.12 15:11:03]


로그저장때문에 한컬럼(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)) 이런형식으로 변형하려고 했습니다.

정답을못찾으면 조회해와서자바에서 짤라도 되긴하는대 자바에서 하면 번잡스러울거같아서 쿼리에서 해결할 수 있다면 쿼리로 해결하고 싶어서요. 고수님들 가르침 부탁드립니다.

by 마농 [2019.07.15 10:18:47]

1. TO_CHAR 구문이 문제네요. --> TO_CHAR 와 SUBSTR  빼보세요.
2. Distinct 는 왜 쓸까요? --> 불필요합니다. 중복된다면? 뭔가 잘못 적용하신 듯.
3. Connect By Level 을 이용한 행복제시 유의사항 확인하세요. --> http://gurubee.net/article/55635


by 돼지뚱뙝이 [2019.07.15 15:40:17]

마농님 답변감사합니다. 인터넷에서 검색해본걸로 여러개 결합해서 만들다보니 문제가 있었군요 단순히 서브쿼리의 to_char만 뺏는대 원하는대로 조회가 됩니다. 정말감사해요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입