Oracle拆分字串函式

2021-09-22 10:56:50 字數 1610 閱讀 9848

本函式可以將「目標字串」以「指定字串」進行拆分,並通過表結構返回結果。**如下:

create or replace type 

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));

v_start := v_length + 1;

else

pipe row

(substr(p_string, v_start, v_index - v_start));

v_start := v_index + 1;

end if

;

end loop

;

return

;end

splitstr;

建立完畢後,我們來測試一下,例如執行如下sql:

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拆分字串函式

原文中 有個錯誤 v start v length 1 雖然設定下次查詢起點為字串長度 1,但下次v index還是0,程式不會退回。程式沒有退出條件,故本句應改出使程式退出。exit 還有,原文中未檢測傳入的字串引數為null或為空的情況 此時返回的v index為空 下面改正了,見紅色字型部分。...

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,待拆分的字...