原文中
有個錯誤
:
v_start := v_length +雖然設定下次查詢起點為字串長度+1,但下次v_index還是0,程式不會退回。程式沒有退出條件,故本句應改出使程式退出。1;
exit;還有,原文中未檢測傳入的字串引數為null或為空的情況(此時返回的v_index為空),下面改正了,見紅色字型部分。
本函式可以將「目標字串」以「指定字串」進行拆分,並通過表結構返回結果。**如下:
create or replace type建立完畢後,我們來測試一下,例如執行如下sql:str_split
is table of varchar2
(4000
);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
number
:= 1
; v_index
number
;begin
while
(v_start <= v_length)
loop
v_index := instr(p_string, p_delimiter, v_start);
if v_index =
0
then
pipe row
(substr(p_string, v_start));
exit;
--v_start := v_length +
1;--這不能使程式退出,應改為exit;
elsif v_index>0 then --
else
pipe row
(substr(p_string, v_start, v_index - v_start));
v_start := v_index + 1;
else
exit;--傳入的是空字串或null,則返回值也沒null
end if
;
end loop
;
return
;end
splitstr;
select其輸出結果為乙個兩行的表,如下圖:* from table
(splitstr(
'hello,cnblogs!'
,','
));
將行轉為列顯示:
select如圖:a.column_value v1,b.column_value v2
from
(select
* from
(select rownum
rn,t.*
from table
(splitstr(
'hello,cnblogs!'
,','
)) t)) a,
(select
* from
(select rownum
rn,t.*
from table
(splitstr(
'hello,cnblogs!'
,','
)) t)) b
where
a.rn=
1 and
b.rn=
2
原文:另一篇:
Oracle拆分字串函式
本函式可以將 目標字串 以 指定字串 進行拆分,並通過表結構返回結果。如下 create or replace type str split is table of varchar2 4000 create or replace function splitstr p string in varch...
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拆分字串
create or replace type array string is table of varchar2 2000 create or replace function f split string 拆分字串 author zhaohuihua i src in varchar2,待拆分的字...