--------------------------------------------------
DB : 오라클 (ORACLE)
오류 메세지 : ORA-22922 : 존재하지 않는 LOB 값.
영문 오류 메세지 : ORA-22922 nonexistent lob value.
--------------------------------------------------
ORA-22922 우연찮게 쿼리 튜닝을 하다 가 만난 오라클 에러 메세지다.
일에 치여 답답해 아무 생각 없이, 그냥 LOB는 뭔가 하고 멍때리다 한번 알아보기로 했다.
* LOB : Large Object
?? 큰 객체?ㅋㅋ 뭐지...
다시 뒤돌아 보면 조회하고자한 내역을 살펴 보니,
Select USER_NM, wm_concat(HOBBY) AS HOBBY From USERINFO_DETAEIL Gruop by USER_NM; |
위와 같은 구조로 거대한 테이블을 새로운 뷰 (view) 로 문자열을 붙여 만들고자 하였다.
(위는 예라 그냥 가상의 명칭으로 적어두었다.)
위의 출력 구문 형태를 예상해보면,
USER_NM |
HOBBY |
홍길동 |
탁구,농구,출구 |
심청이 |
수영,발레 |
이런 데이터가 수만개는 존재하는 테이블인데 WM_CONCAT 을 통해 하려니 문자열 합치는데 아무래도 지원되지 않는다는걸 이리저리 찾아보니 알게 되었다.
그중 지식인의 ORACLE LOB에 관한 이런글도 보게되었다.
오라클은 LOB을 저장하기 위한 여섯 가지 데이터 유형을 제공합니다.
|
여튼 oracle wm_concat 의 대용량 조회의 사용시 ORA-22922 존재하지 않는 LOB 값이 발생 된다는것 같다.
위의 지식인님 말씀대로 툴이 문제라고 보기엔.. 좀 안맞는것 같긴하지만, 이진데이터가 용량이 제일 작으니
그런 형태로 문자를 합치는 역할을 하는 와중에 뷰로 만들다보니 초과 되는가 보다...
해결하려면 형변환 함수를 사용해보라는 글을 어디서 본것 같아 아래와 같이 변경해보았다.
Select USER_NM , TO_CHAR( wm_concat(HOBBY) ) AS HOBBY From USERINFO_DETAEIL Gruop by USER_NM; |
결과는 ?? 잘된다.... ㅋㅋㅋ;
잘되니 우선 메모 해두고 일을 끝내야하니.. 언젠가 내 머릿속에서 이어지기만 바래야겠다 ㅋㅋㅋ
언젠가 더 자세히 알수 있을 그날까지 안뇽! 친구들 !!ㅋㅋ 여튼 해결 끝!