我在存储过程中写了一个游标,但是总是编译不过去,向大家请教!!
我的目的是从游标中得到一个集合,对游标中每个成员进行处理
declare w1 cursor for
select userid
from input_audi
where duanno=aiQuduanID;fetch w1 into lluserid;select prjid1,waterreal
into llprjid,llwaterreal
from input_audi
where userid=lluserid;
(对取出的llprjid,llwaterreal进行计算,略去)
fetch w1 into lluserid;
close w1;
我的目的是从游标中得到一个集合,对游标中每个成员进行处理
declare w1 cursor for
select userid
from input_audi
where duanno=aiQuduanID;fetch w1 into lluserid;select prjid1,waterreal
into llprjid,llwaterreal
from input_audi
where userid=lluserid;
(对取出的llprjid,llwaterreal进行计算,略去)
fetch w1 into lluserid;
close w1;
cursor w1 is select useridfrom input_audi
where duanno=aiQuduanID;
begin
请看:CREATE or replace PROCEDURE wa_realfee
(aiQuduanID in varchar)
AS
lluserid varchar2(10);
llpayprj1 number(10,2);
llpayadd1 number(10,2);
llpayadd2 number(10,2);
llpayadd3 number(10,2);
llprjid varchar2(10);
llprjid1 varchar2(10);
llprjid2 varchar2(10);
llprjid3 varchar2(10);
llwaterreal varchar2(10);
llpaytotal number(10,2);
llbaseprice varchar2(10);
begin
declare w1 cursor is select userid from input_audi
where duanno=aiQuduanID;
begin
fetch init into lluserid;select prjid1,waterreal
into llprjid,llwaterreal
from input_audi
where userid=lluserid;
select baseprice,prjid1,prjid2,prjid3
into llbaseprice,llprjid1,llprjid2,llprjid3
from tb_price
where id=llprjid;
llpayprj1:=round(nvl(to_number(llbaseprice)*to_number(llwaterreal),0),2);
llpayadd1:=round(nvl(to_number(llprjid1)*to_number(llwaterreal),0),2);
llpayadd2:=round(nvl(to_number(llprjid2)*to_number(llwaterreal),0),2);
llpayadd3:=round(nvl(to_number(llprjid3)*to_number(llwaterreal),0),2);
llpaytotal:=round(nvl(llpayprj1+llpayadd1+llpayadd2+llpayadd3,0),2);
update input_audi
set payprj1=llpayprj1,
payadd1=llpayadd1,
payadd2=llpayadd2,
payadd3=llpayadd3,
paytotal=llpaytotal
where userid=lluserid;
fetch init into lluserid;
close w1;
end;
end;
(aiQuduanID in varchar)
AS
lluserid varchar2(10);
llpayprj1 number(10,2);
llpayadd1 number(10,2);
llpayadd2 number(10,2);
llpayadd3 number(10,2);
llprjid varchar2(10);
llprjid1 varchar2(10);
llprjid2 varchar2(10);
llprjid3 varchar2(10);
llwaterreal varchar2(10);
llpaytotal number(10,2);
llbaseprice varchar2(10);
declart
cursor w1 is select useridfrom input_audi
where duanno=aiQuduanID;
begin
loop
fetch w1 into lluserid;
exit when w1%notfound;
select prjid1,waterreal
into llprjid,llwaterreal
from input_audi
where userid=lluserid;
select baseprice,prjid1,prjid2,prjid3
into llbaseprice,llprjid1,llprjid2,llprjid3
from tb_price
where id=llprjid;
llpayprj1:=round(nvl(to_number(llbaseprice)*to_number(llwaterreal),0),2);
llpayadd1:=round(nvl(to_number(llprjid1)*to_number(llwaterreal),0),2);
llpayadd2:=round(nvl(to_number(llprjid2)*to_number(llwaterreal),0),2);
llpayadd3:=round(nvl(to_number(llprjid3)*to_number(llwaterreal),0),2);
llpaytotal:=round(nvl(llpayprj1+llpayadd1+llpayadd2+llpayadd3,0),2);
update input_audi
set payprj1=llpayprj1,
payadd1=llpayadd1,
payadd2=llpayadd2,
payadd3=llpayadd3,
paytotal=llpaytotal
where userid=lluserid;
fetch init into lluserid;
end coop;
close w1;
end;這樣你試試看吧!