CREATE OR REPLACE FUNCTION STR2_TO_ARRAY(P_STRING IN VARCHAR2
,P_SPLIT IN VARCHAR2)
RETURN ARRAYTYPE AS
V_STR LONG DEFAULT P_STRING || P_SPLIT;
V_N NUMBER;
V_VALUE VARCHAR2(1000);
V_DATA ARRAYTYPE := ARRAYTYPE();
BEGIN
LOOP
V_N := INSTR(V_STR
,P_SPLIT);
EXIT WHEN(NVL(V_N
,0) = 0);
BEGIN
V_VALUE := LTRIM(RTRIM(SUBSTR(V_STR
,1
,V_N - 1)));
EXCEPTION
WHEN OTHERS THEN
V_VALUE := NULL;
END;
V_DATA.EXTEND;
V_DATA(V_DATA.COUNT) := V_VALUE;
V_STR := SUBSTR(V_STR
,V_N + LENGTH(P_SPLIT));
END LOOP;
RETURN V_DATA;
END;
SELECT COLUMN_VALUE
FROM TABLE(STR2_TO_ARRAY('1,2,3,4'
,','));
