CREATE OR REPLACE TYPE splitArray AS TABLE OF VARCHAR2(2048);
--------字符串拆分函数
CREATE OR REPLACE FUNCTION fu_split_Array (
str IN VARCHAR2,--输入的字符串
split_param IN VARCHAR2 --拆分的参数
)
RETURN splitArray IS split_array
splitArray := splitArray();--定义拆分数组
t_temp VARCHAR2(2048);
t_begin number :=0;--循环变量开始参数
t_end number := 1;--截取字符长度的开始位置结束参数
t_length number :=0;--字符串的长度
t_paramLength number :=0;--传入字符串截取参数的长度
BEGIN
t_length := length(str);--获取传入字符的长度
t_paramLength := length(split_param);--截取参数的长度
--在temp 变量中查找 split_param 检索当前 split_param字符串的位置 如果没有找到则返回0
WHILE t_begin < t_length
LOOP
dbms_output.put_line('截取='||t_begin); --起始位置从1开始截取匹配split_param字符串并返回他所在的位置
t_begin := instr(str,split_param,t_end);
/* IF t_begin = 0 THEN
Dbms_Output.put_line('见到了');
t_begin := t_length;
t_temp := SUBSTR (str, t_end);
split_array.extend;
split_array (split_array.count) := str;
IF t_end >= t_length
THEN
Dbms_Output.put_line('见到了11111111111');
EXIT;
END IF;
ELSE*/
--判断当前是否长度超出原字符串长度 如果超出则不执行
IF t_end >= t_length
THEN
--Dbms_Output.put_line('见到了11111111111');
EXIT;
END IF;
t_temp := SUBSTR(str,t_end,t_begin-t_end);
--dbms_output.put_line(t_temp);
t_end := t_begin+t_paramLength;
split_array.extend;
split_array(split_array.count) := t_temp;
/*END IF;*/
END LOOP;
RETURN split_array;
END fu_split_Array;
--测试
SELECT fu_split_Array('A,B,C,D,E,',',') FROM DUAL;
备注 :如果你的字符串最后一位含有分隔符例如“,”之类的标示 则使用红色未注释部分
如果你的字符串最后一位没有标记 则使用橘色注释部分代码 则返回所有的字符串你就需要重新截取最后一位了目前
我只了解这些 还在测试阶段 完善了全部黏贴出来 谢谢!希望对您有帮助!