create or replace type array_string is table of varchar2(2000);
/
create or replace function f_split_string
-- 拆分字符串
---- author: zhaohuihua
(
i_src in varchar2, -- 待拆分的字符串
i_flg in varchar2 -- 分割符
) return array_string -- 拆分后的字符串数组
as
v_ary array_string; -- 数组, 返回结果
v_sub varchar2(5000); -- 子字符串
v_len integer; -- 分割符的长度
v_idx integer; -- 分割符的位置
v_nxt integer; -- 分割符的下一个位置
begin
if i_src is null then
return null;
end if;
-- 初始化变量
v_ary := array_string();
v_len := length(i_flg);
v_idx := 1;
while v_idx <> -1 loop
-- 获取分割符的位置
v_nxt := instr(i_src, i_flg, v_idx);
if v_nxt = 0 then -- 不存在分割符, 即最后1个子字符串
v_sub := substr(i_src, v_idx);
v_idx := -1;
else -- 否则拆分
v_sub := substr(i_src, v_idx, v_nxt - v_idx);
v_idx := v_nxt + v_len;
end if;
-- 子字符串记录到数组
v_ary.extend;
v_ary(v_ary.count) := v_sub;
-- dbms_output.put_line(v_sub);
end loop;
return v_ary;
Exception
when others then
-- dbms_output.put_line(sqlcode||': '||sqlerrm);
return null;
end f_split_string;
/
调用示例
declare
v_array array_string; -- 拆分后的列表
begin
v_array := f_split_string('zhaohuihua|zhaohuihua@126.com|www.csdn.net', '|');
for i in 1 .. v_array.count loop
dbms_output.put_line(v_array(i));
end loop;
exception
when others then
dbms_output.put_line(sqlcode||': '||sqlerrm);
end;
/
oracle拆分字符串
最新推荐文章于 2024-01-31 09:05:26 发布