1.定义类型TYPE t_Array用于数据返回
TYPE t_Array IS TABLE OF VARCHAR2(4000) index by binary_integer; --写在包package中 index by binary_integer类型的下标就是自增长,numbers类型在插入元素时,不需要初始化
2.定义函数f_Split--在包package中声明,在包体package body中实现具体方法
FUNCTION f_Split(pi_str In Varchar2, pi_separator In Varchar2)
RETURN t_ArrayIS
idx Number;
currentindex Number := 1;
strs t_Array;
v_str varchar2(4000) := pi_str;
BEGIN
IF pi_str IS NOT NULL AND pi_separator IS NOT NULL THEN
IF INSTR(v_str, pi_separator) <> 0 THEN --INSTR(a,b) 判断其是否含有指定的字符,a字符串是否含有b字符串
LOOP
EXIT WHEN v_str IS NULL;
EXIT WHEN INSTR(v_str, pi_separator) = 0;
idx := INSTR(v_str, pi_separator); --从v_str字符串中查找指定字符串pi_separator的位置【从1开始】
strs(currentindex) := SUBSTR(v_str, 0, idx - 1); --substr(字符串,截取开始位置,截取长度) 返回截取的字符串
currentindex := currentindex + 1; --索引向后增加1
v_str := SUBSTR(v_str, idx + 1); --重新赋值截取后的字符串 从idx+1向后截取字符串
END LOOP;
END IF;
END IF;
IF v_str IS NOT NULL THEN
strs(currentindex) := v_str;
END IF;
Return strs;
END;t_ArrayIS
idx Number;
currentindex Number := 1;
strs t_Array;
v_str varchar2(4000) := pi_str;
BEGIN
IF pi_str IS NOT NULL AND pi_separator IS NOT NULL THEN
IF INSTR(v_str, pi_separator) <> 0 THEN --INSTR(a,b) 判断其是否含有指定的字符,a字符串是否含有b字符串
LOOP
EXIT WHEN v_str IS NULL;
EXIT WHEN INSTR(v_str, pi_separator) = 0;
idx := INSTR(v_str, pi_separator); --从v_str字符串中查找指定字符串pi_separator的位置【从1开始】
strs(currentindex) := SUBSTR(v_str, 0, idx - 1); --substr(字符串,截取开始位置,截取长度) 返回截取的字符串
currentindex := currentindex + 1; --索引向后增加1
v_str := SUBSTR(v_str, idx + 1); --重新赋值截取后的字符串 从idx+1向后截取字符串
END LOOP;
END IF;
END IF;
IF v_str IS NOT NULL THEN
strs(currentindex) := v_str;
END IF;
Return strs;
END;