利用oracle存储过程实现splitr函数功能

create PACKAGE student_to as
type student_cursor is ref cursor;
procedure TESTFETCH( cursor2 out student_cursor);
end student_to;
--创建包头 (内可以有多个参数)例如
--(a varhar in,cursor2 out student_cursor)
----------------------
create PACKAGE BODY student_to
is
procedure student_to( cursor2 out student_cursor )
as
cursor1 student_cursor;
v_a varchar2(100);
v_b varchar2(100);
f_s number(10);--第一个逗号位置
n_s number(10);--第二个逗号位置
s_s number(10);--当前位置
v_l number(10);--字符串长度
v_cur varchar2(100);
v_str varchar2(100);
begin
open cursor1--打开游标
for select username,userclass from student;--定义循环 select
loop fetch cursor1 into v_a,v_b;--将字段赋值给 变量
exit when cursor1%notfound;-- 如果游标为空时候 跳出循环
s_s:=1;--初始记录位置
v_b:=','||v_b||',';--字段变量
v_l:=length(v_b);--字符串变量的长度
while (s_sloop
begin
f_s:=instr(v_b,',',s_s);--按,进行查找 条件为 变量位置 后开始查找,的位数--例如s_s当前为2 就是从字符串的第二位开始查找,的位置
n_s:=instr(v_b,',',f_s+1);-- 按,查找 查找下一个,的位置 那么 就是 第一个,+1 就跳过了 前一个, 查找后一个,了
v_cur:=substr(v_b,f_s+1,(n_s-f_s-1));-- 查找前一个, 和后一个, 之间的值 前一个,+1 就是 从前一个,的后一位开始取值---后一个,-前一个,得出之间的值 在-1去掉最后一个,
s_s:=n_s; --更改变量使变量自增--这样就得到了想要的结果
insert into TESTTT(str) values(v_cur);--定义插入语句
commit;
v_str:=v_str||v_cur||',';--定义字符串叠加
end;
end loop;

end loop;
open cursor2 for select v_str str from dual;--定义游标输出 处理后的结果
end student_to;
end student_to;

相关文档
最新文档