游标加锁更新数据
来源:互联网 发布:淘宝哪家眼镜店好 编辑:程序博客网 时间:2024/05/16 07:11
1、加锁会锁住游标中的所有数据行,而不是只锁定取出的数据行
DECLARE CURSOR c1 IS SELECT empno, job, sal FROM emp FOR UPDATE; ...BEGIN OPEN c1; LOOP FETCH c1 INTO ... ... UPDATE emp SET sal = new_sal WHERE CURRENT OF c1; END LOOP;END;
2、加锁的游标,打开后,如果提交事务的话,就再无法取出数据了。
eg:FOR UPDATE子句能获取排他锁。打开游标时所有的行都会被锁住,在事务提交后锁会被释放。所以,我们不能在事务提交后从使用了FOR UPDATE子句的游标中取得数据。如果这样做的话,PL/SQL就会抛出异常。下例中,游标FOR循环在第十次插入操作后会执行失败
DECLARE CURSOR c1 IS SELECT ename FROM emp FOR UPDATE OF sal; ctr NUMBER := 0;BEGIN FOR emp_rec IN c1 LOOP -- FETCHes implicitly ... ctr := ctr + 1; INSERT INTO temp VALUES (ctr, 'still going'); IF ctr >= 10 THEN COMMIT; -- releases locks END IF; END LOOP;END;
如果想在数据提交后也能取得数据,就不要使用FOR UPDATE和CURRENT OF子句。我们可以使用伪列ROWID模拟CURRENT OF子句。只要把每行的ROWID放到UROWID类型的变量中就可以了。然后在后续的更新和删除操作中用ROWID来辨识当前行。
- 游标加锁更新数据
- 游标更新数据
- 游标更新数据
- MySQL并发更新数据加锁处理
- 游标操作,使用游标,更新数据
- Oracle 参数 游标[游标更新删除数据]
- Oracle 参数 游标[游标更新删除数据]
- 使用游标批量更新数据
- 使用游标更新表中数据
- 分页数据、滚动游标和定位更新
- SQL 游标的使用(更新数据)
- sql server 2008 游标循环更新数据
- oracle游标的更新与删除数据
- 使用游标更新和删除数据
- 使用 mysql 游标 批量更新数据
- 加锁进行数据库更新
- 更新游标
- 行列变换、PL/SQL游标加锁
- 学习笔记之使用vi之移动光标(二)
- Yii Framework 开发教程(10) UI 组件 自定义组件
- IntelliJ Idea 常用快捷键列表
- 在linux下安装ngx_lua模块,iconv模块
- mysql_auto_increment设置初始值
- 游标加锁更新数据
- oraclevm 安装mac os x 10.8
- SET TRANSACTION READ ONLY 只读事务
- Sum of absolute differences
- 黑马程序员-网络编程
- 使用Silverlight Toolkit中的主题(Theme)
- 计算机视觉、模式识别、机器学习常用牛人主页链接
- 为arm linux内核添加新的系统调用
- 解决win7输入法不见了,5种解决方法