关于oracle 函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 06:40:21
下面的这个函数是我写的,主要作用就是根据员工的编号:empno 返回员工所在部门的平均工资,但是一直编译通不过,不知道是哪个地方错了,本人是初学者,希望高手指教一下。

create or replace function emp_avg(p_empno emp.empno%type)
return float is
v_empno emp.empno%type;
v_sal emp.sal%type;
avg_sal emp.sal%type;
cursor cur_sal is
select sal from emp where deptno = (select deptno from emp where empno=v_empno);
begin
v_empno:=p_empno;
open cur_sal;
fetch sal into v_sal
for i in 1.. cur_sal%rowcount loop
v_sal++;
end loop;
close cur_sal;
avg_sal=v_sal/i;
return avg_sal;
end;

想要返回平均工资,不需要这样写的,我重写了一些仅供参考:

CREATE OR REPLACE FUNCTION EMP_AVG(P_EMPNO EMP.EMPNO%TYPE)
RETURN NUMBER IS
V_AVG_SAL NUMBER;
BEGIN
BEGIN
SELECT AVG(SAL) AS AVG_SAL
INTO V_AVG_SAL
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO
FROM EMP
WHERE EMPNO = P_EMPNO);
EXCEPTION WHEN OTHERS THEN
RETURN NULL;
END;
RETURN V_AVG_SAL;
END;

运行结果:
SELECT EMP_AVG(P_EMPNO) FROM DUAL;