急!!在线等!!oracle 存储过程加入对工资求最大值,最小值,平均值,总值

luyinghao159 2015-05-09 07:11:08
create or replace procedure pro_payroll4(
rnt int)is
f_no char(20);
f_date date;
cursor cur_1 is select emp_no,emp_date from payroll;
begin
open cur_1;
loop
fetch cur_1 into f_no,f_date;
exit when cur_1%notfound;
if to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=5 then
update payroll set emp_salary=emp_salary*1.05 where
emp_no=f_no;
elsif to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=6 then
update payroll set emp_salary=emp_salary*1.06 where

emp_no=f_no;
elsif to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=7 then
update payroll set emp_salary=emp_salary*1.07 where
emp_no=f_no;
end if;
commit;
end loop;
close cur_1;
end;

在这段代码的基础上加入对工资(emp_salary)求最大值,最小值,平均值,总值
大概功能
求大神解答
...全文
263 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mayanzs 2015-05-22
  • 打赏
  • 举报
回复
如果仅仅只是上述更新语句好象不必要用游标,直接一个语句就可以解决了 update payroll set emp_salary=emp_salary*(1+extract(year from (sysdate-emp_date) year to month)/100) where extract(year from (sysdate-emp_date) year to month) between 5 and 7; commit;
luyinghao159 2015-05-09
  • 打赏
  • 举报
回复
我又改了下,求什么用像上图一样用select来看每个值 create or replace procedure pro_payroll4( rnt int, min1 out decimal, max1 out decimal, avg1 out decimal, sum1 out decimal)is f_no char(20); f_date date; cursor cur_1 is select emp_no,emp_date from payroll; begin open cur_1; loop fetch cur_1 into f_no,f_date; exit when cur_1%notfound; if to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=5 then update payroll set emp_salary=emp_salary*1.05 where emp_no=f_no; elsif to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=6 then update payroll set emp_salary=emp_salary*1.06 where emp_no=f_no; elsif to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=7 then update payroll set emp_salary=emp_salary*1.07 where emp_no=f_no; end if; commit; end loop; close cur_1; select min(emp_salary) as "工资最小值" into min1 from payroll; select max(emp_salary) as "工资最大值" into max1 from payroll; select avg(emp_salary) as "工资平均值" into avg1 from payroll; select sum(emp_salary) as "工资总值" into sum1 from payroll; end;
luyinghao159 2015-05-09
  • 打赏
  • 举报
回复
我改好了 create or replace procedure pro_payroll4( rnt int, min1 out decimal, max1 out decimal, avg1 out decimal, sum1 out decimal)is f_no char(20); f_date date; cursor cur_1 is select emp_no,emp_date from payroll; begin open cur_1; loop fetch cur_1 into f_no,f_date; exit when cur_1%notfound; if to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=5 then update payroll set emp_salary=emp_salary*1.05 where emp_no=f_no; elsif to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=6 then update payroll set emp_salary=emp_salary*1.06 where emp_no=f_no; elsif to_char(sysdate,'yyyy') - to_char(f_date,'yyyy')=7 then update payroll set emp_salary=emp_salary*1.07 where emp_no=f_no; end if; commit; end loop; close cur_1; select min(emp_salary) into min1 from payroll; select max(emp_salary) into max1 from payroll; select avg(emp_salary) into avg1 from payroll; select sum(emp_salary) into sum1 from payroll; dbms_output.put_line('最小值:'||min1); dbms_output.put_line('最小值:'||max1); dbms_output.put_line('平均值:'||avg1); dbms_output.put_line('平均值:'||sum1); end; 但是怎么用call调用,请大神回答下

17,380

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧