현재 프로젝트에서 다른 개발자 분이 만들어 놓은 오라클 펑션인데 앞으로 쓸 일이 많을 것 같아서 올려본다.
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%^^
'개발 > Oracle' 카테고리의 다른 글
[Tip] Drop Table 후 복구 or PURGE (0) | 2015.01.29 |
---|---|
[Tools] 오렌지, 토드 등에서 한글 문제 (0) | 2013.11.18 |
[프로시저] 직접 실행 (0) | 2013.11.14 |
[TIP] 계층 쿼리에 조건을 더하자(START WITH) (0) | 2013.10.08 |