2017-09-28 14 views
1

3つのemployee_idをパラメータとして取り込み、それらを比較するプロシージャを探しています。最低と最高はスワップされます1人は放置されています。私はこれに正しく近づいているかどうかはわかりませんが、if elseセクションでoracle apexにエラーが発生しています。私はおそらくケースステートメントを実装する方が簡単かもしれないと読んだことがありますか? --Note:これは私がこれまで持っているどのような宿題の質問 です:3人の給与を比較し、最低給与と最高給与を交換するPL/SQLプロシージャ

create or replace procedure myproc(empid in number, empid in number, empid in number) is 
    originalsalary1 employees.salary%type; 
    originalsalary2 employees.salary%type; 
    originalsalary3 employees.salary%type; 
    newsalary   employees.salary%type; 
begin 
    select salary INTO originalsalary1 from employees 
    where employee_id = empid; 
    select salary INTO originalsalary2 from employees 
    where employee_id = empid; 
    select salary INTO originalsalary3 from employees 
    where employee_id = empid; 
    if originalsalary1 <= originalsalary2 and originalsalary3 then 
    newsalary := originalsalary1 * 1.1; 
    elseif originalsalary2 <= originalsalary1 and originalsalary3 then 
    newsalary := originalsalary2 * 1.1; 
    elseif originalsalary3 <= originalsalary1 and originalsalary2 then 
    newsalary := originalsalary3 * 1.1; 
    end if; 
end; 
/
+0

これは完全な答えではありませんが、あなたはすべての3つの従業員IDに同じ変数名を使用しているように見えます。彼らはempid1、empid2、empid3ではありませんか? –

+0

あなたのand節は私にとって間違っています。 'およびoriginalsalary3'は、0以外のすべての値で失敗または評価されます –

+0

手順はまた何も返されないように見えます –

答えて

1
CREATE OR REPLACE PROCEDURE PR_PREP(EMPID1 IN INT, EMPID2 IN INT , EMPID3 IN 
INT) 
IS 
MAX_SAL_EMP_ID INT; 
MIN_SAL_EMP_ID INT; 
MAX_SAL EMPLOYEES.SALARY%TYPE; 
MIN_SAL EMPLOYEES.SALARY%TYPE; 
BEGIN 
    SELECT EMP_ID , SALARY INTO MAX_SAL_EMP_ID , MAX_SAL FROM EMPLOYEES WHERE 
    EMP_ID IN (EMPID1, EMPID2, EMPID3) 
    AND SALARY = (SELECT MAX(SALARY) FROM EMPLOYEES WHERE EMP_ID IN (EMPID1, 
    EMPID2, EMPID3)); 

    SELECT EMP_ID , SALARY INTO MIN_SAL_EMP_ID , MIN_SAL FROM EMPLOYEES WHERE 
    EMP_ID IN (EMPID1, EMPID2, EMPID3) 
    AND SALARY = (SELECT MIN(SALARY) FROM EMPLOYEES WHERE EMP_ID IN (EMPID1, 
    EMPID2, EMPID3)); 

    UPDATE EMPLOYEES SET SALARY = MAX_SAL WHERE EMP_ID = MIN_SAL_EMP_ID; 
    UPDATE EMPLOYEES SET SALARY = MIN_SAL WHERE EMP_ID = MAX_SAL_EMP_ID; 
    COMMIT; 
    END; 
+0

ありがとうございました!このアプローチについて考えなかった.. – namesjj

関連する問題