如何在oracle select语句中指定“no update”?

时间:2011-06-17 12:24:26

标签: oracle select

在一个简单的oracle语句中,我必须获取没有锁的行。我认为这可以通过select而不用更新语句来完成。如我错了请纠正我 ?如果不是,任何人都可以让我知道它的格式吗?

2 个答案:

答案 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