[Tip] CONNECT BY 를 활용한 문자열을 테이블 형태로 변환
현재 프로젝트에서 다른 개발자 분이 만들어 놓은 오라클 펑션인데 앞으로 쓸 일이 많을 것 같아서 올려본다.
CREATE OR REPLACE FUNCTION RTS.FN_SPLIT
--# 우선처리해야할 것들.
--# 1. 컬럼생성
--# CREATE OR REPLACE TYPE T_COL AS OBJECT (
--# I NUMBER,
--# N VARCHAR2(30)
--# );
--#
--# 2. 테이블생성
--# CREATE OR REPLACE TYPE T_NESTED_TABLE AS TABLE OF T_COL
(
P_LIST VARCHAR2,
P_DEL VARCHAR2
) RETURN T_NESTED_TABLE AS
V_RET T_NESTED_TABLE;
BEGIN
SELECT CAST(
MULTISET(
SELECT ROWNUM, SUBSTR (
WDATA,
INSTR(WDATA, P_DEL, 1, LEVEL) + 1,
INSTR(WDATA, P_DEL, 1, LEVEL + 1) - INSTR (WDATA, P_DEL, 1, LEVEL) - 1
) NAME
FROM (SELECT P_DEL||P_LIST||P_DEL AS WDATA FROM DUAL)
CONNECT BY LEVEL <= LENGTH (WDATA) - LENGTH (REPLACE (WDATA, P_DEL)) - 1) AS T_NESTED_TABLE
)
INTO V_RET
FROM DUAL;
RETURN V_RET;
END FN_SPLIT;
위와 같은 형태의 펑션은 프로젝트에서 많이 사용되므로 활용 가능성 100%^^