"编译错误"有功能

时间:2014-10-05 07:44:50

标签: oracle plsql

为什么我在这里收到编译错误?表的所​​有属性的名称都是正确的。此外,该表存在。

SQL> create or replace function user_annual_comp(f_eno emp1.empno%type) return number
  2  is
  3    f_sal emp1.salary%type;
  4    f_comm emp1.comm%type;
  5    annual_comm number;
  6  begin
  7    select salary into f_sal from emp1 where empno = f_eno;
  8    select comm into f_comm from emp1 where empno = f_eno;
  9    if f_sal is null then
 10      f_sal := 0;
 11    end if;
 12    if f_comm is null then
 13      f_comm := 0;
 14    end if;
 15    annual_comm = (f_sal + f_comm) * 12;
 16    return annual_comm;
 17  end;
 18  /

结果:

Warning: Function created with compilation errors.

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

PL / SQL中的赋值运算符是:=,而=是相等比较运算符。将第15行更改为

annual_comm := (f_sal + f_comm) * 12;

分享并享受。

答案 1 :(得分:0)

您可以在简单的SQL中编写整个函数:

Select (nvl(sal,0) + nvl(comm,0))*12 as "annual_comm"
   From emp
  Where empno = input_emp_no;

当在纯SQL中完成相同的操作时,永远不要使用PL / SQL。

但是,如果您仍然坚持编写函数,那么正文中的逻辑可以重写为:

annual_comm := (nvl(sal,0) + nvl(comm,0))*12

摆脱IF-END IF阻止。