oracle中字串分解為陣列並遍歷陣列插入表中

2021-08-07 17:42:34 字數 1805 閱讀 2825

1、定義乙個自定義型別

create or replace type ty_str_split is table of varchar2 (4000);

2、定義乙個函式

複製**

create or replace function fn_split (p_str in varchar2, p_delimiter in varchar2)

return ty_str_split pipelined

is j int := 0;

i int := 1;

len int := 0;

len1 int := 0;

str varchar2 (4000);

begin

len := length (p_str);

len1 := length (p_delimiter);

while j < len

loop

j := instr (p_str, p_delimiter, i);

if j = 0

then

j := len;

str := substr (p_str, i);

pipe row (str);

if i >= len

then

exit;

end if;

else

str := substr (p_str, i, j - i);

i := j + len1;

pipe row (str);

end if;

end loop;

return;

end fn_split;

複製**

3、字串陣列的應用

複製**

/* description:車機聯控下發到責任單位

*/ procedure cjlk_unit_down(

p_errcd in out number,

p_errmsg in out varchar2,

p_cjlk_xh in varchar2,

p_jsdwbh in varchar2,

p_jsdwmc in varchar2,

p_zt in varchar default 『a』

)as

cursor l_jsdwbh is select * from table (cast (fn_split(p_jsdwbh,』;』) as ty_str_split));

begin

p_errcd:=0;

p_errmsg:=」;

update aqgl.cjlk set jsdwbh=p_jsdwbh,jsdwmc=p_jsdwmc,zt=』b』 where xh=p_cjlk_xh;

for i in l_jsdwbh loop

insert into aqgl.cjlk_dwfk (xh,pid,jsdwbh,jsdwmc,zt)

values (sys_guid(),p_cjlk_xh,i.column_value,get_dwmc(i.column_value),p_zt);

end loop;

commit;

exception

when others then

rollback;

p_errcd:=sqlcode;

p_errmsg:=sqlerrm;

end;

複製**

其中p_jsdwbh包含了多個用;分隔的字串。

分解字串

按要求分解字串,輸入兩個數m,n m代表輸入的m串字串,n代表輸出的每串字串的位數,不夠補0。例如 輸入2,8,abc 123456789 則輸出為 abc00000 12345678 90000000 分析思路 1.獲得字串的長度length後,判斷與 要輸出位數n 的大小,大於n的話,直接 pr...

字串 Lyndon分解

lyndon串 當且僅當字串 s 的字典序嚴格小於其所有字尾的字典序時,字串 s 是lyndon串。當且僅當字串 s 的字典序嚴格小於其所有非平凡迴圈同構串的字典序時,字串 s 是lyndon串。lyndon分解 字串 s 的lyndon分解為 s w 1 w 2 cdots w n 其中所有的 w...

sqlserver 分割字串為陣列

返回字串按照指定分隔符分割後的陣列的長度 create function get strarraylength str varchar 1024 要分割的字串 split varchar 10 分隔符號 returns int as begin declare location int declar...