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;
/

ポイントは、2 つの数値 (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 に答える