oracle拆分字串

2021-06-20 14:39:02 字數 1809 閱讀 9705

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為空 下面改正了,見紅色字型部分。...