develog

PLSQL split 본문

DB/PLSQL

PLSQL split

냐옴 2014. 3. 14. 19:33

DECLARE


    TYPE T_LIST IS TABLE OF VARCHAR2(100);

    V_LIST T_LIST;


    P_STR       VARCHAR2(100);


    FUNCTION FN_SPLIT(P_STR VARCHAR2, P_DELIMITER VARCHAR2 DEFAULT ',')

    RETURN T_LIST

    IS

        V_STR       VARCHAR2(100);

        V_IDX       NUMBER;

        V_ITEM      VARCHAR2(100);

        V_LIST      T_LIST;

    BEGIN


        V_STR := P_STR;

        V_LIST := T_LIST();


        WHILE TRUE

        LOOP

            IF V_STR IS NULL

            THEN

                V_LIST.EXTEND;

                V_LIST(V_LIST.COUNT) := '';

                EXIT;

            END IF;


            V_IDX := INSTR(V_STR, ',');


            IF V_IDX = 0

            THEN

                V_ITEM := V_STR;


                V_LIST.EXTEND;

                V_LIST(V_LIST.COUNT) := V_ITEM;

                EXIT;

            ELSE

                V_ITEM := SUBSTR(V_STR, 0, V_IDX - 1);

                V_STR := SUBSTR(V_STR, V_IDX + 1);


                V_LIST.EXTEND;

                V_LIST(V_LIST.COUNT) := V_ITEM;

            END IF;

        END LOOP;


        RETURN V_LIST;


    EXCEPTION

    WHEN OTHERS

    THEN

        RETURN NULL;

    END;


BEGIN


    P_STR := 'AA,BB,CC,';

    V_LIST := FN_SPLIT(P_STR, ',');


    DBMS_OUTPUT.PUT_LINE('P_STR : ' || P_STR);

    FOR I IN 1..V_LIST.COUNT

    LOOP

        DBMS_OUTPUT.PUT_LINE(I || '. ' || V_LIST(I));

    END LOOP;


END;

'DB > PLSQL' 카테고리의 다른 글

PLSQL 2차원 배열  (0) 2013.12.12
plsql random  (0) 2013.05.30
Dynamic Cursor  (0) 2012.04.17
기본 구조  (0) 2012.04.17
Comments