오라클 12 환경입니다..
한줄로 표시하기 위해
LISTAGG 를 사용하면 ORA-01489:문자열 연결의 결과가 너무 깁니다. 에러가 발생을 해서
SUBSTR(XMLAGG(XMLELEMENT(....).GETCLOBVAL(), 2) 을 사용했습니다...
그런데 중복 자료가 있어서 중복자료를 제거하기 위해 wm_concat(DISTINCT cod) 를 사용하려고 했는데요..
ORA-29925: WM_CONCAT_OBJ.ODCIAGGREGATEINITIALIZE(를)을 수행할 수 없습니다
라는 에러가 발생합니다..
1.오라클 12에서는 WM_CONCAT을 사용할 수 없나요?
2.결과값 문자열이 4000이넘는 경우의 중복값 제거는 어떻게 처리해야 하나요?
도움 부탁드립니다...
WITH COD_TMP AS ( SELECT 'AAAA' COD FROM DUAL UNION ALL SELECT 'BBBB' COD FROM DUAL UNION ALL SELECT 'CCCC' COD FROM DUAL ), NAM_TMP AS ( SELECT 'AAAA' COD, LEVEL||'' COD2, '가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가' NAM FROM DUAL CONNECT BY LEVEL <= 10000 UNION ALL SELECT 'BBBB' COD, '1' COD2, '라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라라' NAM FROM DUAL UNION ALL SELECT 'BBBB' COD, '2' COD2, '1234567890' NAM FROM DUAL UNION ALL SELECT 'CCCC' COD, '1' COD2, '아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아' NAM FROM DUAL ) SELECT C.COD , SUBSTR(XMLAGG(XMLELEMENT(x, ',', N.NAM) ORDER BY C.COD).EXTRACT('//text()').GETCLOBVAL(), 2) FROM COD_TMP C, NAM_TMP N WHERE C.COD= N.COD GROUP BY C.COD
샘플자료 만들어 봤습니다...
1.오라클 12에서는 WM_CONCAT을 사용할 수 없나요? -> 없습니다.
2.결과값 문자열이 4000이넘는 경우의 중복값 제거는 어떻게 처리해야 하나요?
-> http://www.gurubee.net/article/55512 ( 댓글보시면 db별 버젼별 잘정리되어있습니다.)
바로 DISTINCT를 못하고 반드시 C와 N이 조인된 후에야 값을 알수 있는 상황(?)을 보여주세요.
저는 Distinct 부터 하고 조인 했지만, 조인부터 하고 Distinct 해도 됩니다.
보여 주신 대로 개선해 드렸습니다.
보여 주신게 실제와 다른 모양이네요.
실제와 유사한걸 보여주세요.
SELECT cod , LISTAGG(nam, ',') WITHIN GROUP(ORDER BY cod) v FROM (SELECT DISTINCT c.cod , n.nam FROM cod_tmp c , nam_tmp n WHERE c.cod= n.cod ) GROUP BY cod ;