Получение ошибки PLS-00103 при создании функции в Oracle
Я получаю пару ошибок в моей следующей функции:
CREATE OR REPLACE FUNCTION department_salary
(emp_dept VARCHAR2, salary NUMBER)
RETURN NUMBER AS
dept_sal NUMBER := salary;
BEGIN
IF emp_dept = 'MIS' THEN dept_sal := (dept_sal * .10) + dept_sal;
ELSEIF emp_dept = 'SALES' THEN dept_sal := (dept_sal * .15) + dept_sal;
ELSEIF emp_dept = 'HR' THEN dept_sal := (dept_sal * .20) + dept_sal;
ELSE dept_sal := -1;
END IF;
RETURN dept_sal;
END;
/
Я получаю следующие ошибки:
LINE/COL ERROR
-------- ----------------------------------------------------------------
7/10 PLS-00103: Encountered the symbol "EMP_DEPT" when expecting one
of the following:
:= . ( @ % ;
8/10 PLS-00103: Encountered the symbol "EMP_DEPT" when expecting one
of the following:
:= . ( @ % ;
14/4 PLS-00103: Encountered the symbol ";" when expecting one of the
following:
if
1 ответ
Решение
Проблема заключается в синтаксисе IF
заявление. В частности, ключевое слово ELSIF
не ELSEIF
(нет e
). Если вы измените это, функция скомпилирует
SQL> ed
Wrote file afiedt.buf
1 CREATE OR REPLACE FUNCTION department_salary
2 (emp_dept VARCHAR2, salary NUMBER)
3 RETURN NUMBER
4 AS
5 dept_sal NUMBER := salary;
6 BEGIN
7 IF emp_dept = 'MIS' THEN dept_sal := (dept_sal * .10) + dept_sal;
8 ELSIF emp_dept = 'SALES' THEN dept_sal := (dept_sal * .15) + dept_sal;
9 ELSIF emp_dept = 'HR' THEN dept_sal := (dept_sal * .20) + dept_sal;
10 ELSE dept_sal := -1;
11 END IF;
12 RETURN dept_sal;
13* END;
14 /
Function created.
Если вы пишете такой код, как правило, проще использовать CASE
заявление
SQL> ed
Wrote file afiedt.buf
1 CREATE OR REPLACE FUNCTION department_salary
2 (emp_dept VARCHAR2, salary NUMBER)
3 RETURN NUMBER
4 AS
5 dept_sal NUMBER := salary;
6 BEGIN
7 CASE emp_dept
8 WHEN 'MIS' THEN dept_sal := (dept_sal * .10) + dept_sal;
9 WHEN 'SALES' THEN dept_sal := (dept_sal * .15) + dept_sal;
10 WHEN 'HR' THEN dept_sal := (dept_sal * .20) + dept_sal;
11 ELSE dept_sal := -1;
12 END CASE;
13 RETURN dept_sal;
14* END;
15 /
Function created.