業務需求:使用遊標對查詢出來的記錄進行更新過程中,不允許其它人進行更改

LuiseDalian發表於2014-04-27

--測試select... for update為行鎖

declare

  CURSOR cur_dept IS SELECT * FROM dept WHERE deptno = 10 FOR UPDATE; 

begin

  FOR r IN cur_dept LOOP

    IF r.dname = 'ACCOUNTING' THEN

      dbms_lock.sleep(120);

      UPDATE dept SET dname = dname || 'ACCOUNTING_NEW' WHERE CURRENT OF cur_dept;

    ELSE

      UPDATE dept SET dname = 'BAD' WHERE CURRENT OF cur_dept;

    END IF;

  END LOOP; 

  COMMIT;

end;

 

--在該程式碼執行的過程中,更新deptno = 10,會被阻塞,而更新deptno = 20不受阻塞

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1150216/,如需轉載,請註明出處,否則將追究法律責任。

相關文章