Oracle更新锁

时间:2013-10-13 03:28:13

标签: oracle plsqldeveloper

我对以下程序中的更新锁有点混淆

CREATE OR REPLACE
PROCEDURE pro_cedure(
    p_dept_id NUMBER )
IS
  CURSOR mycursor
  IS
    SELECT deptno,comm,extra
    FROM emp
    WHERE comm IS NULL
    AND extra  IS NOT NULL
    AND deptno  = p_dept_id 
    FOR UPDATE OF comm;
BEGIN
  FOR emp_rec IN mycursor
  LOOP
    UPDATE emp SET comm = extra 
    WHERE CURRENT OF mycursor;
    INSERT INTO changed
      (
        deptno,
        oldval,
        newval,
        seq_nextval
      )
      VALUES
      (
        emp_rec.deptno,
        emp_rec.comm,
        emp_rec.extra,
        sequence_name.nextval
      );
  END LOOP;
END; 

如果其他用户在我更新时尝试更新同一个表或同一行,是否会导致该程序锁定?

1 个答案:

答案 0 :(得分:0)

如果你并行运行这个程序2次,那么第二次执行就不会执行select,直到第一次提交。 (当然如果你为comm子句的更新运行其他语句,它们将以相同的方式排队。)