Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3899634
  • 博文数量: 534
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4800
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(534)

文章存档

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(253)

2006年(73)

分类: Oracle

2006-12-19 11:35:19

SELECT ... FOR UPDATE [OF ...][NOWAIT | WAIT integer]

注意:
  1>. Lock操作只有在事务提交后才释放锁;同样的道理,对于一个游标使用了for update打开后,虽然关闭了游标,但这个lock也仍是存在

的,直到事务结束(commit/rollback)。

  2>. of 的注意点:
下面的例子,如果没有"OF e.salary"那么表employees和表departments中与该查询相关的行将会lock。添加了"OF e.salary"后只会Lock 表

employees与该查询相关的行。
SELECT e.employee_id, e.salary, e.commission_pct
   FROM employees e JOIN departments d
   USING (department_id)
   WHERE job_id = 'SA_REP'
   AND location_id = 2500
   FOR UPDATE OF e.salary;

  3>. NOWAIT指在执行"SELECT ... FOR UPDATE"时其他事务修改了该查寻的结果但还没有提交,此时将立即返回如下结果:
ORA-00054: resource busy and acquire with NOWAIT specified
如果不使用NOWAIT等项,默认为等待(WAIT)其他事务提交后在返回结果。

  4>. WAIT integer,与NOWAIT的功能相似,但可以等待用户指定的秒数。如:"WAIT 3"等待3秒后,其他事务还没有提交将返回如下结果:
ORA-30006: resource busy; acquire with WAIT timeout expired
阅读(2169) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~