2012-11-28 31 views
1

即時得到我下面的函數內的幾個錯誤:獲取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 

回答

3

問題是IF語句的語法。特別是,關鍵字是ELSIF而不是ELSEIF(no 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. 
+1

它可能會顯得更加清晰代碼這就像'return case'emp_dept when'mis'then'foo when'sales'then bar'等 –