본문 바로가기

개발/Oracle

[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%^^