PL / SQL函数查看最高工资

时间:2011-12-16 12:07:23

标签: plsql aggregate-functions stored-functions

我有接收部门名称和汇总操作(平均值,最大值,最小值)的功能,并对在给定部门工作的员工的工资应用操作并返回结果

create or replace
function salaryData (p_depname varchar2, p_aggr_op varchar2)
return number
is
  v_aggrr_op varchar2(20);
  v_sal_max number;
  v_sal_min number;
  v_sal_avg number;
begin
  select max(e.salary), min(e.salary), avg(e.salary)
  into v_sal_max, v_sal_min, v_sal_avg
  from employee e join department d
  on e.deptno=d.deptno
  where d.deptname=p_depname;
  if p_aggr_op in ('max','MAX') then
    return v_sal_max;
  end if;

  if p_aggr_op in ('min','MIN') then
    return v_sal_min;
  end if;

  if p_aggr_op in ('avg','AVG') then
    return v_sal_avg;
  end if;
end salaryData;
/ 

当我使用函数调用

select salaryData('FINANCE','max') as max_sal from employee;

我的输出如下:

max_sal|
-------|
20000  |
20000  |
20000  |
20000  |
20000  |
-------

我怎样才能证明这是employeeid的最高工资,在姓氏

中工作

2 个答案:

答案 0 :(得分:0)

您所做的只是为每位员工选择财务部门的最高工资。您是否需要通过员工的部门?如,

select e.employeeid, e.employeename, salaryData(d.deptname,'max') as max_sal from employee e join department d on e.deptno=d.deptno;

这至少会提供每个员工所属部门的最高工资,而不仅仅是财务。

答案 1 :(得分:0)

select salaryData('FINANCE','max') as max_sal from dual;

允许您在sql中运行一次函数。