orcal 分割字符串(JAVA中Split方法)

时间:2021-07-08 15:23:20

近日在写存储过程的时候需要用到分割字符串并返回一串数组,网上百度了一大堆,发现要不是错误的,要不就是需求不对,因此干脆自己写一个类似Java里面的split的方法好了。
下面定义一个函数返回的是一个number型数组,第一个参数是你的字符串,第二个是你要分割的字符

function splitString(
p_list varchar2,
p_sep varchar2
) return DEF_PKG.arr_table
is
v_table DEF_PKG.arr_table;
l_idx pls_integer;
v_list varchar2(50) := p_list;
v_str varchar2(20);
vcount int:=0;
begin
SELECT LENGTH(REGEXP_REPLACE(v_list, p_sep )) COUNT into vcount FROM DUAL;
for i in 1 .. vcount loop
l_idx := instr(v_list,p_sep);--出现的位数
if l_idx = 0 then
v_table(i):= to_number(v_list,'0');
exit;
end if;
v_str:=substr(v_list,0,l_idx-1);--截取出的字符
v_list := substr(v_list,l_idx+length(p_sep));--仍要继续截取的
v_table(i):=to_number(v_str,0);
end loop;
return v_table;
end splitString;```



贴出DEF_PKG.arr_table的定义:
type arr_table is table of number index by binary_integer;

如果对数组定义不太清楚的可以百度下查找相关定义

通过declare下面测试下

 declare 
v_table DEF_PKG.arr_table;
begin
v_table:= common_tools.splitString('1;2;3;',';');
for i in 1 .. v_table.count --循环数组
loop
dbms_output.put_line('111:'||v_table(i));
end loop;
end ;

结果:
111:1
111:2
111:3

以上如有错误欢迎各位博友指正!