wm_concat질문 입니다. 0 10 1,505

by 라이너스 [SQL Query] 12c [2017.07.25 17:31:57]


SELECT to_char(wm_concat(sys_guid())) attach_id FROM dual;

이렇게 가져오던게 이제 12c에선 안되네요

이건 어떻게 변경해야 하는지요?

 

by 우리집아찌 [2017.07.25 17:39:02]

http://www.gurubee.net/article/55512


by 신이만든짝퉁 [2017.07.25 17:40:50]

wm_concat() 은 12c에서 제거된 기능입니다. 

링크된 게시물의 ListAgg을 쓰세요.


by 마농 [2017.07.25 17:41:21]

wm_concat 는 ListAgg 로 변경 가능합니다.
wm_concat 이나 ListAgg 는 여러건의 문자열을 하나로 합칠 때 사용됩니다.
사용하신 쿼리는 From dual 이므로 1건의 자료입니다.
1건의 자료에 해당 함수를 사용하는 것은 무의미합니다.


by 라이너스 [2017.07.25 21:19:59]

답변 감사들 드립니다

근데 저렇게해서 값을 가져오게 되있어서

12c로 변경된후. 문제가 생기네여


by 라이너스 [2017.07.26 00:08:05]

마농님 항상 답변 감사드립니다

543A3561889이런식의 값을 가져오는 쿼리였는데

Listagg하면 값이 다르게 나와서 ㅈㄹ문드린 겁니다


by 마농 [2017.07.26 08:50:07]

글쎄요?
정말 한건만 조회하는 거라면? wm_concat 는 무의미하게 사용된 거구요.
wm_concat 쓰던걸 listagg 쓴다고 결과형식이 달라지진 않을 것 같네요.
값 자체는 원래 매번 실행할때마다 다르게 나오는게 맞구요.
결론은 listagg 를 아예 빼는게 맞을 듯 하네요.


by jkson [2017.07.26 09:02:47]

wm_concat이 의미가 있으려면 sys_guid() 함수가 row를 리턴하는 함수여야하는데..

저런 형태로도 사용할 수 있는 건가요?

row를 리턴하는 함수일 때는

table(sys_guid()) 이런 형태로 썼던 것 같은데..

 

찾아보니 sys_guid()가 사용자 함수가 아니네요.

https://docs.oracle.com/cd/B12037_01/server.101/b10759/functions153.htm

SYS_GUID generates and returns a globally unique identifier (RAW value) made up of 16 bytes. On most platforms, the generated identifier consists of a host identifier, a process or thread identifier of the process or thread invoking the function, and a nonrepeating value (sequence of bytes) for that process or thread.

 

임의의 값을 리턴하는 함수 같은데.. wm_concat을 왜 쓴 건지 알 수 없네요.

그냥 select sys_guid() from dual 이렇게 쓰셔도 결과가 똑같을 것 같은데요.

만약 리턴하는 데이터의 형태가 달라졌다면.. 위의 내용을 보면 host 식별자, 프로세스나 스레드 식별자를

리턴한다는 것으로 보아 12c로 업그레이드 하시면서 시스템 변경에 따라 차이가 날 수도 있을 것 같긴 하네요.

 


by 라이너스 [2017.07.26 11:34:17]

 

select sys_guid() from dual;하면

 X'552ca0e77aa03cd0e0540017a4771000'

이런값을 가져오고

SELECT to_char(wm_concat(sys_guid())) PJT_ATTACH_id FROM dual; 이렇게 하면

그래서 저걸 날리면 

552CA0E77AA03CD0E0540017A4771000 이렇게 가져오더군요

일단 어쩔수 없이 12C에서는 

 select UPPER(TRIM(SUBSTR(sys_guid(),1,36))) PJT_ATTACH_ID from dual ; 이렇게 하면 동일한 값을 가져오긴 하는데

그래서 질문을 드린거죠  


by 마농 [2017.07.26 12:23:56]

어쨋든 결론은 wm_concat 는 불필요하다 입니다.
sys_guid() 의 결과가 binary 이므로 char 형태로 바꾸는 방법을 찾으시면 됩니다.
UPPER(sys_guid()), sys_guid()||'' 등등
위에 upper, trim, substr 3개 함수를 조합해 사용하셨는데요.
제 생각에는 3개 함수중 아무거나 하나만 사용해도 원하는 결과가 나올 듯 하네요.


by 라이너스 [2017.07.26 14:52:28]

넵 감사합니다.마농님 오늘도 좋은하루 되세요

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