我不知道這是否只是循環超過它應該或如果我的數字是錯誤的,但它應該是:這是輸出一個比我想要的更高的金額的任何理由?
如果部門是10,薪水大於2000給予6%的增加,否則給予提高7%。如果部門是20,薪水大於2500,則提高5%,否則提高5.5%。如果部門是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)。 –