1 CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
2 RETURN ty_str_split
3 IS
4 j INT := 0;
5 i INT := 1;
6 len INT := 0;
7 len1 INT := 0;
8 str VARCHAR2 (4000);
9 str_split ty_str_split := ty_str_split ();
10 BEGIN
11 len := LENGTH (p_str);
12 len1 := LENGTH (p_delimiter);
13
14 WHILE j < len
15 LOOP
16 j := INSTR (p_str, p_delimiter, i);
17
18 IF j = 0
19 THEN
20 j := len;
21 str := SUBSTR (p_str, i);
22 str_split.EXTEND;
23 str_split (str_split.COUNT) := str;
24
25 IF i >= len
26 THEN
27 EXIT;
28 END IF;
29 ELSE
30 str := SUBSTR (p_str, i, j - i);
31 i := j + len1;
32 str_split.EXTEND;
33 str_split (str_split.COUNT) := str;
34 END IF;
35 END LOOP;
36
37 RETURN str_split;
38 -- select * from table (cast( fn_split('12,45',',') as ty_str_split))
39 END fn_split;