2014-10-05 5 views
-2

Почему я получаю ошибку компиляции здесь? Имена всех атрибутов таблицы верны. Кроме того, таблица существует.«Ошибка компиляции» с функцией

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

Нет более подробной информации об ошибке? Какая линия? – Juru

+0

Что показывает 'show error'? –

+0

Надеюсь, что OP скомпилировал функцию в 'SQL * Plus' :-) –

ответ

1

Оператор присваивания в PL/SQL равен :=, а = - оператор сравнения равенства. Изменить строку 15 на

annual_comm := (f_sal + f_comm) * 12; 

Делитесь и наслаждайтесь.

0

Вы могли бы написать, что все функции в простой SQL:

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

Никогда не используйте PL/SQL, когда то же самое можно сделать в простой SQL.

Однако, если вы по-прежнему настаивают на том, чтобы написать функцию, то логика в организме может быть переписано в виде:

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

И избавиться от IF-END IF блока.

Смежные вопросы