我建立了:
业务员表 businessman(b_id,b_name,b_sex,b_age,b_msalary,b_workyear,b_tel)
即是:
业务员销售视图 view_b_sales(b_id,b_name,b_o_t_price)
即是:
我需要用显示游标和隐式游标完成以下功能:将业务员销售总金额前三名的业务员的“月薪”加10元钱,然后还想给销售额的第一名再加10元钱。
我用显示游标可以实现给业务员销售总金额前三名的业务员的“月薪”加10元钱,但是不知道如何结合隐式游标完成----还想给销售额的第一名再加10元钱??
create or replace procedure p_sales as
sales_id view_b_sales.b_id%type;
sales_name view_b_sales.b_name%type;
sales_price view_b_sales.b_o_t_price%type;
cursor sales_cur is
select *
from view_b_sales
order by b_o_t_price;
n number;
counter number;
begin
open sales_cur;
counter:=1;
select count(*) into n from view_b_sales;
while counter<=n loop
fetch sales_cur into sales_id,sales_name,sales_price;
对销售额前三名的业务员月薪加10元钱
if sales_cur%rowcount>=(n-2) then
update businessman set b_msalary=b_msalary+10 where b_id=sales_id;
end if;
counter:=counter+1;
end loop;
close sales_cur;
end;
注解:以上程序的思路是:用显示游标,将view_b_sales的销售金额,然后修改businessman表中的业务员月薪(b_msalary),我之所以要将销售金额按照升序排列,是因为显示游标指到最后一行记录的时候,才能激发隐式游标,即销售额第一名的业务员,从而用隐式游标完成“对销售额第一名的月薪再加10元钱”的操作。
请哪位帮我解答一下,谢谢了!!
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;
/
beckhambobo是游标for循环--一种最简单形式的游标。
你那过程性能你自已最清楚。
v_sor确是一个变量(对象实例),你可以参考游标方面书籍,有详细介绍.
v_sor.sales_id是引用sales_id它的值.