사용자 도구

사이트 도구


oracle:split_to_table

String to Table

String으로부터 table얻기위한 방법

Table 얻기

SELECT RT_SEQ, RT_VALUE
  FROM TABLE(FT_SPLIT_ARRAY(av_str_mail ,'|'));

FT_SPLIT_ARRAY

CREATE OR REPLACE FUNCTION FT_SPLIT_ARRAY (
      av_str   IN VARCHAR2
    , av_split IN VARCHAR2
) RETURN PIPE_FT_SPLIT_ARRAY_TAB PIPELINED IS
 /*********************************************************************************
 PROCEDURE NAME : FT_SPLIT_ARRAY
 DESCRIPTION    : av_str 로 넘어온 문자열을 av_split으로 자른다음 문자열을 붙여서 반환한다.
                  an_num에 값이 있을때는 그 값에 해당하는 자른 문자열을 반환한다.
                  ex> SELECT FN_SPLIT( '123-456-789', '-', NULL ) FROM dual;
                      RETURN 123456789;
                      SELECT FN_SPLIT( '123-456-789', '-', 2 ) FROM dual;
                      RETURN 456;
 RETURN TYPE    : TABLE
 RETURN VALUE   :
 COMMENT        :
 ● 빈값일 때는 ' ' 스페이스를 인수로 받아야 함
**********************************************************************************/
    --변수선언부
    n_len     NUMBER := 0;
    v_RtValue     VARCHAR2(100 BYTE);
BEGIN
    IF av_str IS NOT NULL THEN
        BEGIN
            -- 문자열에 해당 구분자가 몇개 있는지 구한다.
            SELECT LENGTH( av_str ) - LENGTH( REPLACE( av_str, av_split, '' ) )
              INTO n_len
              FROM DUAL;
 
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    n_len := 0;
                WHEN OTHERS THEN
                    n_len := 0;
        END;
    END IF;
 
    IF n_len IS NULL THEN
        BEGIN
            n_len := 0;
        END;
    END IF;
 
 
 FOR i IN 0..n_len LOOP --해당문자열 갯수만큼 FOR문을 돌면서 값을 구한다.
      SELECT
             NVL( REGEXP_SUBSTR( av_str, '[^'|| av_split ||']+', 1, ( i + 1 ) ), '' )
                      INTO v_RtValue
        FROM DUAL ;
             PIPE ROW(PIPE_FT_SPLIT_ARRAY_TYPE(I+1,v_RtValue));
   END LOOP;
END;

PIPE_FT_SPLIT_ARRAY_TYPE

CREATE OR REPLACE TYPE PIPE_FT_SPLIT_ARRAY_TYPE AS OBJECT
(
RT_SEQ       NUMBER,
RT_VALUE    VARCHAR2(100)
)

PIPE_FT_SPLIT_ARRAY_TAB

CREATE OR REPLACE TYPE PIPE_FT_SPLIT_ARRAY_TAB AS TABLE OF PIPE_FT_SPLIT_ARRAY_TYPE
oracle/split_to_table.txt · 마지막으로 수정됨: 2025/04/15 10:05 저자 127.0.0.1