由于oracle中不自带split分割函数,导致很多情况下需要做字符串分割时束手无策,
下面介绍一个可用的方法。
----首先定义一个type类型type_split_a
create or replace type type_split_a is table of varchar2 (4000);
----定义函数,返回一个管道化的返回值
function split(p_string varchar2, p_sep varchar2 := ',')
return type_split_a
pipelined is
idx pls_integer;
v_string varchar2(4000) := p_string;
begin
loop
idx := instr(v_string, p_sep);
if idx > 0 then
pipe row(substr(v_string, 1, idx - 1));
v_string := substr(v_string, idx + length(p_sep));
else
pipe row(v_string);
exit;
end if;
end loop;
end split_a;
---该返回值可以看成一个虚表,我们使用时利用table显示的查询即可
select * from table(split('古力娜扎#迪丽热巴#玛尔扎哈','#'));
查询结果如下: