在一个简单的oracle语句中,我必须获取没有锁的行。我认为这可以通过select而不用更新语句来完成。如我错了请纠正我 ?如果不是,任何人都可以让我知道它的格式吗?
答案 0 :(得分:2)
是的,如果您未在for update
中指定select
,则表示您尚未锁定任何行。
答案 1 :(得分:1)
如果您的代码仅执行select(而不是“select for update”),则不会在记录上获取锁定。如果您在行上有DML(更新,选择,删除)或“选择更新”,那么您可以锁定。
* *旧答案
您可能正在寻找Oracle中的“FOR UPDATE NOWAIT”子句,但它的行为并不像您所描述的那样。
它将尝试获取select中行/行的锁定,如果其他人已经获取了锁定,则会返回错误。
会话1 :(尚未提交..此声明已被此声明锁定)
SQL> update scott_emp
2 set sal = sal + 100
3 where empno = 7839;
1 row updated.
会话2:
SQL> select * from scott_emp
2 for update nowait;
select * from scott_emp
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified