ORACLE에서 SPLIT 함수 구현 by VINS

오라클 SPLIT 함수를 구현하기 위해서는 우선 TYPE 을 선언해야 한다.
-->
CREATE OR REPLACE TYPE TB_SPLIT AS TABLE OF VARCHAR2(32767);

TYPE을 하나 생성 했다면 함수를 하나 생성해야 하는데
이는 아래와 같다.

------ 아래 -------

CREATE OR REPLACE FUNCTION SPLIT
(
  P_LIST VARCHAR2,
  P_DEL VARCHAR2
) RETURN TB_SPLIT PIPELINED
IS
  L_IDX  PLS_INTEGER;
  L_LIST VARCHAR2(32767) := P_LIST;
  L_VALUE VARCHAR2(32767);
BEGIN
  LOOP
       L_IDX := INSTR(L_LIST,P_DEL);
       IF L_IDX > 0 THEN
           PIPE ROW(SUBSTR(L_LIST,1,L_IDX-1));
           L_LIST := SUBSTR(L_LIST,L_IDX+LENGTH(P_DEL));
       ELSE
           PIPE ROW(L_LIST);
           EXIT;
       END IF;
  END LOOP;
  RETURN;
END SPLIT;
/


자 그 다음은 사용법이다.

SELECT ROWNUM, COLUMN_VALUE FROM TABLE(SPLIT('9,8,1,2,3,4,5,6,7',','));

용법에 대한 설명은 예전 MS-SQL SPLIT 함수를 구현할 때 설명해 둔바 있다.

아래 링크를 참조 하자

관련 항목
MS-SQL (SPLIT)
http://mcpicdtl.blogspot.com/2008/03/ms-sql-split-by-vins.html