游标的问题

[复制链接]
查看11 | 回复7 | 2010-3-1 11:08:27 | 显示全部楼层 |阅读模式
我定义一个游标:
cursorcur_test is select * from tbl_test where code = '1' for update
但是我在遍历数据的时候,我同时又插进去了符合这个where条件的记录,那这个游标还会不会遍历到呢?
回复

使用道具 举报

千问 | 2010-3-1 11:08:27 | 显示全部楼层
你可以试下嘛
回复

使用道具 举报

千问 | 2010-3-1 11:08:27 | 显示全部楼层
不会的,因为oracle不像sql server具有动态游标功能,sql server的动态游标可以在每fetch一次重新构建游标,所以可以读取到commit后的所有结果。
回复

使用道具 举报

千问 | 2010-3-1 11:08:27 | 显示全部楼层
for update里不能简单修改表
[ 本帖最后由 dingjun123 于 2010-8-26 10:23 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:08:27 | 显示全部楼层
如果游标在另一个session commit数据之后打开,当然会读取到数据,而sql server 的动态游标就是说:不管游标何时打开,只要还未关闭,fetch时,记录都是动态更新的,也就是最新的数据。而oracle则不一样,只要游标一打开,里面的结果集就固定了(基于scn实现),for update时会阻塞where条件中的更新或者删除记录行,但是不会阻塞插入。
[ 本帖最后由 ocpdba591 于 2010-8-26 10:25 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:08:27 | 显示全部楼层
呵呵,建议LZ再看看事务,事务一致性和锁定相关知识,然后再回过头看这个问题就简单多了
回复

使用道具 举报

千问 | 2010-3-1 11:08:27 | 显示全部楼层
oracle是不会的,我试过了,定义的时候实际已经把所有的记录搜索出来了.
回复

使用道具 举报

千问 | 2010-3-1 11:08:27 | 显示全部楼层
open cur的时候oracle就确定了结果集,这是oracle的一个特性,保证有一致的视图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行