create procedure name_pro
as
str varchar2(50);
num number:=1;
cursor t_sor is
select a1,a2 from testa;
begin
for v_sor in t_sor loop
num:=1;
loop
exit when instr(v_sor.a2,',',1,num)>0;
if num=1 then
str:=substr(v_sor.a2,1,instr(v_sor.a2,',',1)-1);
elsif instr(v_sor.a2,',',num)>0 then
str:=substr(v_sor.a2,instr(v_sor.a2,',',num-1)+1,instr(v_sor.a2,',',num)-1);
else
str:=substr(v_sor.a2,instr(v_sor.a2,',',num-1)+1,length(v_sor.a2));
end if;
insert into testa values(v_sor.a1,str);
num:=num+1;
end loop;
end loop;
end;
/
as
str varchar2(50);
num number:=1;
cursor t_sor is
select a1,a2 from testa;
begin
for v_sor in t_sor loop
num:=1;
loop
exit when instr(v_sor.a2,',',1,num)>0;
if num=1 then
str:=substr(v_sor.a2,1,instr(v_sor.a2,',',1)-1);
elsif instr(v_sor.a2,',',num)>0 then
str:=substr(v_sor.a2,instr(v_sor.a2,',',num-1)+1,instr(v_sor.a2,',',num)-1);
else
str:=substr(v_sor.a2,instr(v_sor.a2,',',num-1)+1,length(v_sor.a2));
end if;
insert into testa values(v_sor.a1,str);
num:=num+1;
end loop;
end loop;
end;
/
loop
....
exit when instr(v_sor.a2,',',1,num)>0;--此句放在循环语句最后
end loop;
A1 A2
-------------------- ----------------------------------------
a aa
a1 aaaaaa
在这基础上我稍微修改了一下:
create or replace procedure name_pro
as
str varchar2(50);
num number:=1;
cursor t_sor is
select a1,a2 from testa;
begin
for v_sor in t_sor loop
num:=1;
loop
if num=1 and instr(v_sor.a2,',',1,num)=0 then
str:=v_sor.a2;
elsif num=1 and instr(v_sor.a2,',',1,num)>0 then
str:=substr(v_sor.a2,1,instr(v_sor.a2,',',1)-1);
elsif instr(v_sor.a2,',',1,num)=0 then
str:=substr(v_sor.a2,instr(v_sor.a2,',',1,num-1)+1);
else
str:=substr(v_sor.a2,instr(v_sor.a2,',',1,num-1)+1,instr(v_sor.a2,',',1,num)-instr(v_sor.a2,',',1,num-1)-1);
end if;
insert into testb values(v_sor.a1,str);
num:=num+1;
exit when instr(v_sor.a2,',',1,num-1)=0;
end loop;
end loop;
end;
/