CREATE OR REPLACE PROCEDURE Campaignprize_range( CampaignIdd NUMBER,PrizeTypeIdd NUMBER,ServerIndex VARCHAR2, RETVAL OUT VARCHAR2) IS hashcoded VARCHAR2(8); prizetypenum number(6); prizetypenumold number(6); prizetypenumc VARCHAR2(6); totalcount number(6); flag number(1); single number(6); BEGIN flag:=0; RETVAL :=''; single:=0; SELECT count(1) into totalcount FROM mkt_campaignprize a WHERE a.campaignid=CampaignIdd AND a.issend=0 and a.prizetypeid=PrizeTypeIdd and a.hashcode like ''||ServerIndex||'%' order by a.campaignprizeid asc; DECLARE CURSOR c1 IS SELECT a.hashcode,a.campaignprizeid FROM mkt_campaignprize a WHERE a.campaignid=CampaignIdd AND a.issend=0 and a.prizetypeid=PrizeTypeIdd and a.hashcode like ''||ServerIndex||'%' order by a.campaignprizeid asc; BEGIN FOR r1 IN c1 LOOP single:=single+1; if flag=0 then prizetypenumold:= to_number( substr(r1.hashcode,3,6)); RETVAL :=prizetypenumold; if totalcount=single then RETVAL :=RETVAL||','||prizetypenumold||'$'; end if; flag:=1; else prizetypenum:=prizetypenumold+1; prizetypenumc:=lpad(prizetypenum,6,'0'); hashcoded:=ServerIndex||prizetypenumc; if hashcoded=r1.hashcode then prizetypenumold:=prizetypenum; else RETVAL :=RETVAL||','||prizetypenumold||'$'; prizetypenumold:= to_number( substr(r1.hashcode,3,6)); RETVAL :=RETVAL||prizetypenumold; end if; if totalcount=single then RETVAL :=RETVAL||','||prizetypenumold||'$'; end if; end if; END LOOP; END; Exception When others then RETVAL :='E'||SUBSTR(SQLERRM, 1, 600); END Campaignprize_range;