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_*** 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_***);
v_idx := 1;
while v_idx <> -1 loop
-- 獲取分割符的位置
v_nxt := instr(i_src, i_***, 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|[email protected]|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 拆分字串
create or replace function splitstr p string in varchar2,p delimiter in varchar2 return str split pipelined as v length number length p string v start...
oracle拆分字串
procedure hand mid sys bpm use role iorgtype in bpm compsite user.orgtype type,idate in date is v orgtype bpm compsite user.orgtype type iorgtype v id...
Oracle拆分字串函式
原文中 有個錯誤 v start v length 1 雖然設定下次查詢起點為字串長度 1,但下次v index還是0,程式不會退回。程式沒有退出條件,故本句應改出使程式退出。exit 還有,原文中未檢測傳入的字串引數為null或為空的情況 此時返回的v index為空 下面改正了,見紅色字型部分。...