话不多说,先贴代码
DECLARE
CURSOR MY_CUR IS
SELECT T.EMPNO, T.DEPTNO, T.SAL
FROM scott.emp T
WHERE T.EMPNO > '7698'
FOR UPDATE OF SAL;--锁定sal这一列,不允许其他session更新sal列的数据
NUM NUMBER;
BEGIN
FOR EMP_ROW IN MY_CUR LOOP
NUM := TRUNC(TO_NUMBER(EMP_ROW.EMPNO) / NULLIF(TO_NUMBER(SUBSTR(EMP_ROW.DEPTNO,1,2)),0));
IF MOD(EMP_ROW.EMPNO,10) = 0
THEN
UPDATE scott.emp T
SET T.SAL = TRUNC(TO_NUMBER(EMP_ROW.EMPNO) / NUM)
WHERE CURRENT OF MY_CUR;
ELSE IF MOD(EMP_ROW.EMPNO,11) = 0 THEN
UPDATE scott.emp T
SET T.SAL = TRUNC(TO_NUMBER(EMP_ROW.EMPNO) / NUM)
WHERE CURRENT OF MY_CUR;
ELSE
UPDATE scott.emp T
SET T.SAL = 100
WHERE CURRENT OF MY_CUR;
END IF;
END IF;
END LOOP;
COMMIT;
END;
根据EMP表中EMPNO的不同值,截取DEPTNO的字段作为 除数,更改SAL字段。
WHERE CURRENT OF MY_CUR--指定当前游标行