create or replace procedure p_sales 
as
cursor t_sor is
select *
    from (select * from view_b_sales
    order by b_o_t_price desc) where rownum<4;
n number:=0;
begin
for v_sor in t_sor loop
n:=n+1;
update businessman set b_msalary=b_msalary+10 where b_id=v_sor.sales_id;
if n=1 then
update businessman set b_msalary=b_msalary+10 where b_id=v_sor.sales_id;
end if;
end loop;
end;
/

解决方案 »

  1.   

    我看了beckham的程序,我认为你用的显示游标不对,没有open cursor,fetch...,close cursor的操作,我把它改了后,程序还是有问题。而且我问的是:按照我的思路,就是用显示游标,将view_b_sales的销售金额(b_o_t_price)按从小到大排列(ASDC),然后修改businessman表中的业务员月薪(b_msalary),我之所以要将销售金额按照从低到高排列,是因为显示游标指到最后一行记录的时候,才能激发隐式游标,即销售额第一名的业务员,从而用隐式游标完成“对销售额第一名的月薪再加10元钱”的操作。
      到底如何用隐式游标,隐式游标是不是只能返回一行记录?还有是不是“显示游标指到最后一行记录的时候,才能激发隐式游标“?
      还有,update businessman set b_msalary=b_msalary+10 where b_id=v_sor.sales_id;
    这个语句中的v_sor.sales_id是什么意思?v_sor 只是一个循环变量,这样写我觉得不对。
     所以,请问一下这个过程procedure具体怎么编?
       谢谢!
      

  2.   

    beckhambobo是游标for循环--一种最简单形式的游标。
      

  3.   

    你那过程性能你自已最清楚。
    v_sor确是一个变量(对象实例),你可以参考游标方面书籍,有详细介绍.
    v_sor.sales_id是引用sales_id它的值.