我是有點混亂有關更新鎖,在下面的程序甲骨文更新鎖
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;
如果其他用戶嘗試在我更新它會導致鎖更新同一個表或同一行這個節目?
寫入數據(update,inserd,delete)的SQL命令會鎖定已修改的行。在提交或回滾被髮布之前,鎖保持活動。如果另一個會話(用戶)試圖修改鎖定的記錄,則會話將被掛起,並且必須等到鎖定被另一個會話刪除。 – krokodilko
你不需要光標,你可以將整個過程簡化爲兩個簡單的語句。 –
是的,但我需要插入到更改後的表中,作爲舊值和新值在單個過程中。 – user2686661