oracle中使用FUNCTION方法做String的SPLIT功能
今天在处理两个系统间数据同步问题时,遇到了数据内使用逗号间隔(如:1,2,3),同步到另一个系统是另一种格式(如:0100000000,不同的位置业务规则不一样),这时就要将逗号间隔的内容使用类似与java中String字符串的split方法拆分,但是oracle没有类似的方法,通过查询在网上搜索了一个FUNCTION,很好用。
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000); CREATE OR REPLACE FUNCTION fn_split(p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_split IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2(4000); str_split ty_str_split := ty_str_split();BEGIN len := LENGTH(p_str); len1 := LENGTH(p_delimiter); WHILE j < len LOOP j := INSTR(p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR(p_str, i); str_split.EXTEND; str_split(str_split.COUNT) := str; IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR(p_str, i, j - i); i := j + len1; str_split.EXTEND; str_split(str_split.COUNT) := str; END IF; END LOOP; RETURN str_split;END fn_split;