我在存储过程中写了一个游标,但是总是编译不过去,向大家请教!!
我的目的是从游标中得到一个集合,对游标中每个成员进行处理
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;

解决方案 »

  1.   

    declare
    cursor w1 is select useridfrom input_audi
       where duanno=aiQuduanID;
    begin
      

  2.   

    我按楼主说的还是不行呀?
    请看: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;
      

  3.   

    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);
    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;這樣你試試看吧!
      

  4.   

    我明白了,因为我在end coop前面多写了一句fetch init into lluserid;,多谢了!!!