0

编译函数时出现此错误。

PLS-00103:在预期以下之一时遇到符号“*”::=。(@%;

这是代码:

CREATE OR REPLACE FUNCTION IncreaseSalary 

(para_empid IN employee.employeeid%TYPE, para_increase IN NUMBER)

 RETURN NUMBER 
IS

 v_SalaryOut NUMBER(10,2);
 v_salary2 NUMBER;

BEGIN

 SELECT Salary INTO v_Salary2
 FROM Employee
 WHERE employeeid = para_empid;

 --this is the area that pertains to the error
 (v_salary2 * para_increase) + v_salary2 = v_salaryout; 

 RETURN v_SalaryOut;

EXCEPTION
 WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee not found.');

END IncreaseSalary;
/

下一部分不是函数的一部分,也不是错误的一部分,但可能有错误。

DECLARE
 v_SalaryOutput NUMBER := IncreaseSalary;

BEGIN
 IncreaseSalary('01885', '20%');

DBMS_OUTPUT.PUT_LINE ('Increased Salary: ')
 || TO_CHAR(v_SalaryOutput));

END;
/

关键是取两个数字(employeeid 和增加表中已经列出的任何薪水的百分比)并返回更新后的薪水。我不明白为什么我不能乘法。

4

1 回答 1

0
  1. 您不能像这样为变量赋值。目标变量应该放在第一位。它应该是,

    v_salaryout := (v_salary2 * para_increase) + v_salary2;

  2. 您已将 para_increase 声明为 NUMBER。但是在调用函数时,您将传递 '20%' 作为值。这将导致numeric or value error: character to number conversion error.

  3. dbms_output 语句中有一个额外的括号。

    DBMS_OUTPUT.PUT_LINE ('Increased Salary: ' || TO_CHAR(v_SalaryOutput));

于 2014-05-01T01:40:36.760 回答