--在包Pkg_Stm_Char的包头中定义
type Table_Para is table Of varchar2(1000) index by binary_integer;
--在包Pkg_Stm_Char的包头中定义Fn_Split分割函数
Function Fn_Split(p_Str Varchar2, p_Splitchar Varchar2 := ',', p_Flag Pls_Integer := 1) Return Table_Para;
--在包Pkg_Stm_Char的包体中定义函数逻辑
--拆分字串,相当于Split函数的功能
--参数: P_Str,要拆分的字串
-- P_SplitChar,字串的分隔符
-- P_Flag,(=1,默认将字串未尾的字串的分隔符去除掉)
Function Fn_Split(p_Str Varchar2,
p_Splitchar Varchar2 := ',',
p_Flag Pls_Integer := 1) Return Table_Para Is
t_Para Table_Para;
l_Str Varchar2(4000) := p_Str;
l_Len Number := Length(l_Str);
l_Splitchar Varchar2(1) := p_Splitchar;
l_Splitstr Varchar2(100);
l_b Number := 1;
l_e Number := 1;
l_x Number := 0;
Begin
If p_Flag = 1 Then
If Substr(l_Str, l_Len, 1) = l_Splitchar Then
l_Str := Rtrim(l_Str, l_Splitchar);
End If;
End If;
While l_e != 0 Loop
l_e := Instr(l_Str, l_Splitchar, l_b);
l_Splitstr := Substr(l_Str, l_b, l_e - l_b);
If l_e = 0 Then
l_Splitstr := Substr(l_Str, l_b, l_Len);
End If;
l_b := l_e + 1;
t_Para(l_x) := l_Splitstr;
l_x := l_x + 1;
End Loop;
Return t_Para;
End;
使用实例一:(输出数组的序号及数组对应的内容)
Declare
l_Table Pkg_Stm_Char.Table_Para;
Begin
l_Table := Pkg_Stm_Char.Fn_Split('aaaaa,bbbb,cccc,dddd,', ',', 1);
For Cnt in l_Table.First .. l_Table.Last Loop
--Dbms_Output.Put_Line(Cnt);---输出对应的数字
--Dbms_Output.Put_Line(l_Table(Cnt));---输出对应的内容
Dbms_Output.Put_Line(Cnt||','||l_Table(Cnt));
End Loop;
End;
输出结果:
0,aaaaa
1,bbbb
2,cccc
3,dddd
使用实例二:(输出整个数组中的内容)
Declare
l_Table Pkg_Stm_Char.Table_Para;
Begin
l_Table := Pkg_Stm_Char.Fn_Split('1,aaaaa$2,bbbb$3,cccc$4,dddd$', '$', 1);
Dbms_Output.Put_Line(l_Table(0));
Dbms_Output.Put_Line(l_Table(1));
Dbms_Output.Put_Line(l_Table(2));
Dbms_Output.Put_Line(l_Table(3));
End;
输出结果:
1,aaaaa
2,bbbb
3,cccc
4,dddd