これ以上のループが発生している場合や、数値が間違っている場合はわかりませんが、それは次のようになります。これは私が望むよりも高い金額を出力している理由は何ですか?
IF deptが10で給与が2000より大きい場合は、 7%の引き上げ。 IF部門が20人、給与が2500人を超える場合は5%の引き上げを行い、それ以外の場合は5.5%の引き上げを行います。 IF部門が30、給与が1000を超える場合は7%の引き上げ、それ以外の場合は6.5%の引き上げを行います。
DECLARE
v_deptno empbackup.deptno%TYPE;
v_sal empbackup.sal%TYPE;
CURSOR raise IS
SELECT deptno, sal
FROM empbackup
FOR UPDATE OF sal;
BEGIN
OPEN raise;
FETCH raise INTO v_deptno, v_sal;
WHILE raise%FOUND LOOP
IF v_deptno = 10 AND v_sal > 2000 THEN
v_sal := v_sal * 1.06;
ELSE
v_sal := v_sal * 1.07;
END IF;
IF v_deptno = 20 AND v_sal > 2500 THEN
v_sal := v_sal * 1.05;
ELSE
v_sal := v_sal * 1.055;
END IF;
IF v_deptno = 30 AND v_sal > 1000 THEN
v_sal := v_sal * 1.07;
ELSE
v_sal := v_sal * 1.065;
END IF;
UPDATE empbackup
SET sal = v_sal
WHERE CURRENT OF raise;
FETCH raise INTO v_deptno, v_sal;
END LOOP;
CLOSE raise;
END;
/
正しくタグ付けしてください。これはmySQLかOracleか?両方 –
あなたはコードが期待値を返さないためのテストデータを提供してもらえないことはできますか? – kpater87
PL/SQLデバッガを調査する時間。ところであなたは[カーソルFORループ](http://docs.oracle.com/database/121/LNPLS/cursor_for_loop_statement.htm)で、このコードを単純化することができます。 –