oracle自定义split分割函数

时间:2022-04-27 03:39:33

函数如下:

 1 create or replace FUNCTION fn_rme_split(p_str       IN VARCHAR2,
 2                                         p_delimiter IN VARCHAR2)
 3   RETURN rme_split
 4   PIPELINED IS
 5   j    INT := 0;
 6   i    INT := 1;
 7   len  INT := 0;
 8   len1 INT := 0;
 9   str  VARCHAR2(4000);
10 BEGIN
11   len  := LENGTH(p_str);
12   len1 := LENGTH(p_delimiter);
13 
14   WHILE j < len LOOP
15     j := INSTR(p_str, p_delimiter, i);
16     IF j = 0 THEN
17       j   := len;
18       str := SUBSTR(p_str, i);
19       PIPE ROW(str);
20       IF i >= len THEN
21         EXIT;
22       END IF;
23     ELSE
24       str := SUBSTR(p_str, i, j - i);
25       i   := j   len1;
26       PIPE ROW(str);
27     END IF;
28   END LOOP;
29   RETURN;
30 END fn_rme_split;

 

测试如下:

1 select temp.ass_code
2 from (SELECT COLUMN_VALUE AS ass_code
3 FROM TABLE(rme_delete.fn_rme_split(a,b,c,d,e,f ,,))) temp;

执行结果如下:

oracle自定义split分割函数