오라클 CONCAT과 WM_CONCAT의 차이점이 무엇인가요? 0 9 8,436

by 열심히할께요 [2014.11.17 16:53:40]


안녕하세요.

두 함수의 차이점이 애매모호해서요.

10G에서 WM_CONCAT이 있었고 11G에서는 사용할 수 없는 것으로 알고 있습니다..

CONCAT은 둘다 사용할 수 있으나 인자는 두개까지만 허용 되는 것으로 알고 있구요.

...

현재 문제는 운영 계열에서는 oracle 10g를 사용중이고 현재 개발쪽에서는 11g를 사용중인데...

그렇다면 WM_CONCAT을 CONCAT으로 변경해도 상관없나요?..

LISTAGG는 11g부터 생긴 함수라 애매모호 하네요..;

10g, 11g 둘다 가능 한 함수는 CONCAT뿐인 거 같은데..

조언 부탁드릴께요~!^^

by DarkBee [2014.11.17 16:55:46]
concat 과 wm_concat는 다른 형태의 함수입니다. 거진 상관관계가 없는..

어떤 작업을 하실지를 알아야 정확히 알려 드릴수 있습니다.

 


by 열심히할께요 [2014.11.17 17:44:08]

행 데이터를 일렬로 붙여서 검색을 하려 합니다..

수행 속도 차이도 있는거 같아서 애매모호 하네요..

성능의 차이는 없는건가요??


by 마농 [2014.11.17 17:22:41]

concat 은 단순 문자연결을 하는 문자함수이구요
wm_concat 은 그룹함수입니다.
11g에서 사용 못하는 것은 아닙니다.
10g에서도 항상 사용 가능한것도 아닙니다.
wm_concat 은 오라클 내부적으로 사용하기 위한 특정 사용자의 함수입니다.
비공식 함수이구요.
http://www.gurubee.net/article/55512


by 열심히할께요 [2014.11.17 17:42:33]

음.. 11G 에서는

ORA-06575: 패키지 또는 함수 WM_CONCAT 은 부적당한 상태입니다

라든지 00904 에러가 나더군요..

또한 둘다 쓸수 있게 XMLAGG를 사용해봤는데 버퍼 부족이라고 하네요...


by 마농 [2014.11.17 17:51:39]

VARCHAR2(4000) 이상인 경우 버퍼 오류 발생합니다.
해결발법은 VARCHAR2 가 아닌 CLOB 으로 해결해야 하구요.
XMLAgg 맨 마지막에 .getCLOBval() 해주시면 됩니다.
XMLAgg(XMLElement(x, ',', name) ORDER BY code).Extract('//text()').getCLOBval()


by 열심히할께요 [2014.11.17 18:14:05]

^ㅡ^ 감사합니다!!!!!!!~~


by 열심히할께요 [2014.11.17 19:03:49]

ORA-22835: 버퍼가 너무 작아 CLOB를 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다(실제: 13075, 최대: 4000).
CLOB에서 TO_CHAR로 변환하면서  에러가 발생을 하네요 WM_CONCAT 썼을 때는 문제가 없었는데..


by 마농 [2014.11.18 08:52:50]

varchar2 가 안되서 CLOB으로 바꾼건데.

그걸 다시 Varchar2로 바꾸려니 에러나는건 당연한거죠.

 

wm_concat 썼을때는 문제 없었다구요?

wm_concat 라서 문제 없었던게 아닐 듯 합니다.

운영계와 개발계의 자료가 달라서 그런 듯 하네요.


by 열심히할께요 [2014.11.18 09:16:58]

제가 짠 쿼리도 아니여서 대충 넘기다가 

그 WM_CONCAT 부분이 이상해서 살펴보니 정말 기존 쿼리 자체가 문제가 있었더라구요.

그렇다고 의도조차 알 수 없는데 임의로 수정할 수 없어서 그냥 XMLAGG를 사용하여 버젼 별로 상관없게만 치환했습니다^^(결국은 안되는건 안되게 냅뒀다는...)

감사합니다!~ 좋은 하루 되세요!

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