oracle 什么时候游标,oracle – 什么时候应该在游标中使用’for update nowait’?

论坛 期权论坛 期权     
选择匿名的用户   2021-6-2 20:10   7804   0

使用for update nowait将导致行占用并获取锁定,直到执行提交或回滚.

尝试获取锁定的任何其他会话都将收到ORA-00054的Oracle错误消息:资源占用,并通过NOWAIT指定或超时获取,而不是等待释放锁定.

SESSION1:

CURSOR abc_cur

IS

select * from dept where deptno =10 for update nowait;

这里行被锁定,直到游标关闭或提交/回滚执行.如果同时第2个会话中的另一个用户尝试访问相同的记录,那么将会出现如下错误:

会议2:

select * from dept where deptno =10 for update nowait;

该用户甚至不能更新或删除第一个会话已锁定的相同记录.

ERROR at line 1:

`ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired`

用法:

现在,如果要对某些记录集进行某些操作,并且不希望另一个会话的另一个用户重写数据,则必须首先锁定记录(使用更新nowait),然后进行操作.完成操作后,关闭光标并提交.

编辑

假设在我的会话1中,我执行了以下脚本:

declare

cursor abc is select * from temp ;

temp abc%rowtype;

begin

open abc;

end;

现在在会议2我执行

select * from temp ;

0 rows found

如果我再次执行相同的脚本

declare

cursor abc is select * from temp ;

temp abc%rowtype;

begin

open abc;

end;

然后我得到ORA-00054:资源繁忙并且采用NOWAIT指定或超时到期,而不是等待释放锁.

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP