試試這個程序!
這將工作,如果描述的圖案將與指定的空間和類似的描述,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