본문 바로가기

IT TIP/Oracle

사용자정의 SPLIT함수.

 

[Oracle] 사용자정의 SPLIT함수. 예제

 

 

 

..

CREATE OR REPLACE FUNCTION AHRANG.GET_SPLIT(
    IN_STR IN VARCHAR2,
    IN_DEL IN VARCHAR2 DEFAULT ','
)
RETURN VAR_ARRAY PIPELINED
/****************************************************************
  IN_STR 을 IN_DEL 구분으로 분리하여여 1차원 배열로 리턴
  
 TYPE 생성 
 =>  CREATE OR REPLACE TYPE VAR_ARRAY AS TABLE OF VARCHAR2(1000);
 
 사용
 => SELECT * FROM TABLE(GET_SPLIT('ABC DEF 이름 네임 없음' ,' '))
  
*****************************************************************/
AS 
   V_IDX  INTEGER := 0;
   V_STR  VARCHAR2(32767) := IN_STR;
   
   BEGIN
        LOOP
            V_IDX := INSTR(V_STR , IN_DEL );
            IF (V_IDX > 0 ) THEN
                PIPE ROW(TRIM(SUBSTR(V_STR ,1,V_IDX-1)));
                V_STR := TRIM(SUBSTR(V_STR ,V_IDX + LENGTH(IN_DEL)));
            ELSE
                PIPE ROW(TRIM(V_STR));
                EXIT;
            END IF;
            
        END LOOP;
   
   END;


.