oracle游标打开机制

gtfcccq 2009-08-06 10:51:54
在oracle中定义了一个游标 比如select * from A order by a1,同时open该游标,
在游标中需要对该表A进行修改,并且修改A表的数据a1字段,是否会对游标的正常读取有
影响没有。数据是在open的时候从数据中读出,还在fecth的时候才中数据库中读出。
...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vvwwvv 2009-08-08
  • 打赏
  • 举报
回复
游标是在fetch的时候,取把数据,修改需要"COMMIT;"才能修改到数据库
inthirties 2009-08-08
  • 打赏
  • 举报
回复
游标是在fetch的时候,才会把数据拿到。

修改需要提交才能修改到数据库
zhangchu_63 2009-08-07
  • 打赏
  • 举报
回复
没注意过。
帮顶。。。。。
majy 2009-08-07
  • 打赏
  • 举报
回复
1. 修改的时候在没有commit前,是不对原表操作的,所以对正常读取数据没什么影响。

2. 程序一般都是这么写的:

OPEN c1;
LOOP
FETCH c1 INTO c1_rec;
EXIT WHEN c1%NOTFOUND;

从这一点说明,是fetch的时候取数据的,取数据的时候才知道是否已经没数据了 :-)
csuxp2008 2009-08-07
  • 打赏
  • 举报
回复
fetch的时候才有数据取出

要想通过游标修改表中数据,在定义游标的时候要加 for update

在修改数据的时候要加上where current of cursor_name
Megan2008 2009-08-07
  • 打赏
  • 举报
回复
2楼只写了打开游标的一部分,用完之后还要把游标关闭
cosio 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 gtfcccq 的回复:]
    在oracle中定义了一个游标 比如select * from A order by a1,同时open该游标,
在游标中需要对该表A进行修改,并且修改A表的数据a1字段,是否会对游标的正常读取有
影响没有。数据是在open的时候从数据中读出,还在fecth的时候才中数据库中读出。
[/Quote]

游标的取出的时候,在你修改后并commit那就取得到值,
如果游标取出,而修改后,还没有提前,那应该会锁住该行,如果是同时发生的话!
gaogao110 2009-08-07
  • 打赏
  • 举报
回复
即使是后来修改了并且提交了,也不会影响原来的值,oracle会把原来的值保存在另外一个地方

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧