1. 단일행을 다중 row로 분리
오라클에서 '1,2,3,4,5'라는 문자열을 레코드로 만들려면 어떻게해야 할까?
'1,2,3,4,5'
return
===========
1
2
3
4
5
즉, 결과가 위와같이 나오게 하려면?
connect by를 사용해서 만들수가 있다.
SELECT SUBSTR (str, INSTR (str, ',', 1, LEVEL) + 1, INSTR (str, ',', 1, LEVEL + 1) - INSTR (str, ',', 1, LEVEL) - 1 ) sub FROM (SELECT ',' || '1,2,3,4,5' || ',' str FROM DUAL) CONNECT BY LEVEL <= LENGTH (str) - LENGTH (REPLACE (str, ',')) - 1
위와 같이 connect by의 level을 사용해서 구현할 수 있다.
2. 다중 row 결과를 단일행으로 연결
이번엔 반대로 해보자.
1
2
3
4
5
return
===========
'1,2,3,4,5'
즉, 이렇게 나오게 하려면 다음과 같이 해보자.
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH (str, ',')), 2) path# FROM ( SELECT str, ROWNUM rnum FROM ( SELECT 1 str FROM dual UNION SELECT 2 str FROM dual UNION SELECT 3 str FROM dual UNION SELECT 4 str FROM dual UNION SELECT 5 str FROM dual ) ) START WITH rnum = 1 CONNECT BY PRIOR rnum = rnum - 1
테이블을 이용해서 같은 결과를 뽑아내려면 다음과 같이 해보자.
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH (ename, ',')), 2) path# FROM ( SELECT ename, ROWNUM rnum FROM emp ) START WITH rnum = 1 CONNECT BY PRIOR rnum = rnum - 1
'프로그래밍 언어 > 쿼리문 + Oracle + MySQL' 카테고리의 다른 글
[쿼리문] Merge into를 이용해서 insert나 update를 자동으로 실행하자. (0) | 2015.02.04 |
---|---|
[쿼리문] 조건절에 WHERE 1=1, WHERE 1=0 사용하여 쿼리 간편하게 사용하기 (0) | 2014.11.01 |
[쿼리문/오라클] Oracle에서 중복 조인을 피하기 위한 Update 방법 (MERGE 사용) (0) | 2011.04.01 |
[Oracle] 오라클에서 WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자. (5) | 2011.03.03 |
[쿼리문/오라클] Oracle 저장 프로시저 샘플 (0) | 2011.01.25 |
댓글