当我使用FOR UPDATE OF SAL或简单地编写FOR UPDATE.
根据奥莱利
FOR UPDATE 子句的 OF 列表不限制您仅更改列出的那些列。锁仍然放置在所有行上;OF 列表只是为您提供了一种更清楚地记录您打算更改的内容的方法。如果您只是在查询中声明 FOR UPDATE 并且在 OF 关键字之后不包含一或多个列,那么数据库将锁定 FROM 子句中列出的所有表中所有已识别的行。
这意味着,当我用 指定列名时FOR UPDATE OF SAL,其他用户只能用SAL列进行更改。但是,实际上,情况并非如此。我仍然在其他会话中被锁定。谁能解释一下区别。
更新
 ----- SESSION 1
declare
 emp_info emp.ename%type;
 cursor emp_cur is select ename from emp join dept using(deptno) where deptno=&no for update of sal;
 begin
 open emp_cur;
 loop
 fetch emp_cur into emp_info;
 exit when emp_cur%notfound;
 dbms_output.put_line(emp_info);
 end loop;
 close emp_cur;
 end;
  ----- SESSION 2
  update emp set comm=5 where deptno=10;
  ---- hanged/waiting in session 2