CONCAT 함수는 입력되는 두 문자열을 연결하여 반환한다.
문자열의 데이터타입은 CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB이며, 두 문자열 데이터 타입이 같으면, 그와 같은 데이터타입을 반환한다. 하지만 입력되는 두 문자열의 데이터타입이 다를 경우 NCLOB 데이터타입으로 반환된다.
【형식】
CONCAT( char1, char2 )
【예제】
SQL> select concat('My name is','홍길동') from dual;
-----------------------------------------------------------------
My name is 홍길동
단순히 문자열을 연결하여 반환하는 함수로 CONCAT는 오라클에서 자주 사용하는 익숙한 함수이다.
오늘 정리하고 싶은 WM_CONCAT 함수는 데이터가 그룹화 되어져 있을 때 여러행(Row)의 값을 하나의 컬럼으로 합쳐서
조회 할 수 있는 막강한 기능이라 정리해 보고자 한다.
예제) 아래 예제는 각 부서의 사람들의 이름을 한 ROW에 합쳐서 보여주고 싶을 때 ...
table name: dept_tb
dept_name || emp_name
=========================
인사과 영수
인사과 철수
인사과 민수
인사과 길동
=========================
SELECT wm_concat(emp_name)
FROM dept_tb
GROUP BY dept_name;
※ 단, 여기서 select 결과가 다음과 같이 'oracle.sql.CLOB@e62121' clob의 주소값을 반환하고 있는 경우가 있는데...
이때, TO_CHAR로 감싸서 반환해주면 해결된다! 혹시 그래도 해결이 안된다면... 전자정부프레엠워크 사용시
Oracle의 경우는 iBatis를 위한 sqlMapClient bean 설정 시 다음과 같이 lobHandler를 등록해 주어야 한다.
(ex: context-sqlMap.xml) 보통은 공통 잡는 분들이 프레임워크 잡을떄 당연 추가하겠지만 혹시나..!!!
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
SELECT to_char(wm_concat(emp_name))
FROM dept_tb
GROUP BY dept_name;
[결과]
===============================
dept_name || emp_name
===============================
인사과 영수,철수,민수,길동
===============================
콤마 제거하고 조회 하고 싶을땐 (replace나 translate 함수) : 문자열을 치환해 주는 기능을 하는 표현식
※ 단순 문자열 치환 : TRANSLATE('대상문자열', '비교문자', '바꿀문자')
SELECT translate(wm_concat(emp_name),'a,','a ')
FROM dept_tb
GROUP BY dept_name;
[결과]
==============================
dept_name || emp_name
==============================
인사과 영수철수민수길동
=============================
WM_CONCAT 함수에 대해 정리해 보았다. 알면 정말 유용한 오라클 함수들!! 모르면 정말 어떻게 해야할지
많은 고민들로 시간을 보내는 경우가 허다한데... 한 번 잘 정리해 놓고 이용하면 좋을 듯 싶다!
'Programming > DataBase' 카테고리의 다른 글
[Oracle] 해당 월의 전체 날짜 구하기 (0) | 2016.03.28 |
---|---|
[oracle] merge into (1) | 2015.12.17 |
[oracle] IN 과 NOT IN (0) | 2015.11.27 |
ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. 오류 처리 (0) | 2015.11.09 |
SELECT INSERT (0) | 2015.07.24 |