为什么我在这里收到编译错误?表的所有属性的名称都是正确的。此外,该表存在。
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.
我该如何解决这个问题?
答案 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
阻止。