oracle pl sql 更新游标

EMP表在SCOTT用户下。用SCOTT/TIGER登录。

创建EMP表的副本:

CREATE TABLE EMP1 AS SELECT * FROM EMP;

创建更新游标,用来更新EMP1:

DECLARE
CURSOR C_UPDATE IS SELECT EMPNO, ENAME, JOB, SAL FROM EMP1 FOR UPDATE OF SAL;
V_ROW C_UPDATE%ROWTYPE;
V_SAL EMP1.SAL%TYPE;
BEGIN
  FOR V_ROW IN C_UPDATE LOOP
    IF V_ROW.SAL < 1500 THEN
      V_SAL := V_ROW.SAL * 1.2;
    ELSIF V_ROW.SAL < 2000 THEN
      V_SAL := V_ROW.SAL * 1.5;
    ELSIF V_ROW.SAL < 3000 THEN
      V_SAL := V_ROW.SAL * 2;
    END IF;
    UPDATE EMP1 SET SAL=V_SAL WHERE CURRENT OF C_UPDATE;
  END LOOP;
  COMMIT;
END;

更新前:



更新后:

oracle pl sql 更新游标_第1张图片


下面转自:http://blog.csdn.net/yanleigis/article/details/2950208

1、UPDATE语句仅更新在游标声明的FOR UPDATE子句处列出的列。如果没有列出任何列,那么所有的列都可以更新。 

2、示例中的COMMIT是在提取循环完成以后才完成的,因为COMMIT将释放由该会话持有的所有锁。因为FOR UPDATE子句获得了锁,所以COMMIT将释放这些锁。当锁释放了,该游标就无效了。所以后继的提取操作都将返回ORACLE错误。

你可能感兴趣的:(oracle pl sql 更新游标)