메뉴 건너뛰기

XEDITION

오라클

1. Row 형식의 Type 선언

Create or Replace Type _Split_Row as Object (Item Varchar2(4000)) ;

 

2. Table 형식의 Type 선언

Create or Replace Type _Split_Table as Table of _Split_Row ;

 

3. Table 전환 Function

Create or Replace Function fn_Split_STR (

    p_String in varchar2,

    p_Delimeter in varchar2 )

Return _Split_Table 

AS

    v_Table _Split_Table := _Split_Table() ;

    n_Start number :=1 ;

    n_Pos := 0;

Begin

    -- Delimeter 로 첫번째 분리

    n_Pos := Instr(p_String, p_Delimeter, n_Start);

    -- Array에 추가

    While (n_Pos != 0) Loop

        v_Table.Extend ;

        v_Table(v_Table.Count) := _Split_Row(Substr(p_String, n_Start, n_Pos - n_Start);

        n_Start := n_Pos + 1 ;

        n_Pos := Instr(p_String, p_Delimeter, n_Start) ;

    End Loop;

    v_Table.Extend;

    v_Table(v_Table.Count) := _Split_Row(Substr(p_String, n_Start)) ;

    Return v_Table ;

End ;

 

위 function 활용 방법

Select Replace(ITEM, ' ', '') -- 공백제거

From Table( Case( fn_Split_STR('1,2,3,4,5', ',') as _Split_Table)) ;

 

결과 

ITEM
1
2
3
4
5

 

위로