试试这个程序!
这将工作,如果描述的图案将与指定的空间和类似的描述,PHONENUM流程相同,数量
create or replace procedure sp_split_str
as
end_pos number:=0;
strt_pos number :=1;
CNT NUMBER:=0;
v_desc varchar(200);
begin
for i in (select * from table) loop
if(instr(i.description,':',1,1)=0) then
dbms_output.put_line('Server Name : '||i.servername);
dbms_output.put_line('Description : '||substr(i.description,1,instr(i.description,'#',1,1)-2));
dbms_output.put_line('Phone Number : '||substr(i.description,instr(i.description,'#',1,1)+1,instr(i.description,'Q',-1,1)-2-instr(i.description,'#',1,1)));
dbms_output.put_line('Qty : '||substr(i.description,instr(i.description,'Q',-1,1)+4));
dbms_output.put_line('Object State : '||i.objectstate);
else
for J in 1..(length(i.description)-length(replace(i.description,':','')))+1 loop
IF(J=1) THEN
end_pos := instr(i.description,':',1,1);
v_desc := substr(i.description,strt_pos,end_pos-2);
ELSE
end_pos := instr(i.description,':',1,j);
strt_pos := instr(i.description,':',1,j-1);
END IF;
dbms_output.put_line('Server Name : '||i.servername);
dbms_output.put_line('Description : '||substr(v_desc,1,instr(v_desc,'#',1,1)-2));
dbms_output.put_line('Phone Number : '||substr(v_desc,instr(v_desc,'#',1,1)+1,instr(v_desc,'Q',-1,1)-2-instr(v_desc,'#',1,1)));
dbms_output.put_line('Qty : '||substr(v_desc,instr(v_desc,'Q',-1,1)+4));
dbms_output.put_line('Object State : '||i.objectstate);
CNT := CNT+1;
IF(CNT=J) THEN
v_desc := substr(i.description,strt_pos+2);
ELSE
v_desc := substr(i.description,strt_pos+2,end_pos-2);
END IF;
END loop;
end if;
END LOOP;
END;
什么是你想要实现的逻辑(即你怎么知道在哪里一列开始,另一列结束)?我们应该使用第一个'#'字符和字符串'QTY'吗?然后任何':'开始一个新的逻辑行?只有两行数据,很难猜测如何推广规则。 – 2013-02-20 17:02:20
@anand krishna到目前为止您尝试过什么。请张贴也,以便我们可以改善您的代码 – Saju 2013-02-20 17:02:31