前几天项目加班,突然需要在Oracle中进行split操作。当时因为种种原因没搞定。 今天突然想起来了,决定自己写一个。 直接上代码。
1.首先定义一个Conllection.
create or replace type varchar2_array is table of varchar2(200);
2.split函数代码如下:
create or replace function f_tool_split
(
str_i_input in varchar2,
str_i_spliter in varchar2
)return varchar2_array
is
arr_o_result varchar2_array := varchar2_array(); --分割结果
str_l_input varchar2(4000); --将输入的字符串,去掉前后的空格
--str_l_element varchar2(4000); --分割后的元素
i_l_onset integer := 1; --查找分割元素起始位置
i_l_length integer; --分割字符串的长度
i_l_split_index integer; --分割字符的下标位置
i_l_count integer := 1; --元素计数
begin
--参数验证
if (str_i_input is null or '' = str_i_input) then
return arr_o_result;
end if;
if (str_i_spliter is null or '' = str_i_spliter) then
return arr_o_result;
end if;
--将待分割字符串去掉前后的空格
str_l_input := trim(str_i_input);
--分割字符串的长度
i_l_length := length(str_i_spliter);
loop
--首先将数组容量扩充一个位置
arr_o_result.extend(1);
i_l_split_index := instr(str_l_input, str_i_spliter, i_l_onset, 1);
--当i_l_split_index为0是表示没有找到分割符号
if (0 = i_l_split_index) then
--i_l_count为1表示没有找到分割符号
if (1 = i_l_count) then
arr_o_result(i_l_count) := str_l_input;
--最后一个分割符到字符结尾的内容
else
arr_o_result(i_l_count) := substr(str_l_input, i_l_onset);
end if;
exit;
else
arr_o_result(i_l_count) := substr(str_l_input, i_l_onset, i_l_split_index - i_l_onset);
end if;
--下次查找起始位置
i_l_onset := i_l_split_index + i_l_length;
i_l_count := i_l_count + 1;
end loop;
return arr_o_result;
exception
when others then
return arr_o_result;
end f_tool_split;