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
阅读(2225) | 评论(0) | 转发(0) |