oracle pl sql 更新游标

来源:互联网 发布:淘宝qb充值到一半 编辑:程序博客网 时间:2024/05/17 08:52

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

创建EMP表的副本:

CREATE TABLE EMP1 AS SELECT * FROM EMP;

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

DECLARECURSOR 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;

更新前:



更新后:



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

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

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

0 0
原创粉丝点击