解释 select for update 的意思
我需要修改某一个数据,在PL/SQL Developer里,首先执行select .... for update,锁定某一行,点击 EDIT DATA 按纽,手工修改数据,执行COMMIT。但是好象并没有更改数据,再执行select ....,跳出对话框,说什么 "post change record ..."(具体什么没注意),我点“是”,然后COMMIT按纽又变绿了,再次COMMIT才能更新数据。
这里我就不明白了,为什么要commit两次? SELECT FOR UPDATE 光标
为了对正在处理(查询) 的行不被另外的用户改动,oracle 提供一个 FOR UPDATE 子句来对所选择的行进行锁住。语法如下:
SELECT . . . FROM FOR UPDATE [OF column_reference] [NOWAIT]
如果另一个会话已对活动集中的行加了锁,那么 SELECT FOR UPDATE操作一直等待到其它的会话释放这些锁后才继续自己的操作,对于这种情况,如果加 NOWAIT 子句,如果这些行真的被另一个会话锁定,则OPEN 立即返回并给出:
ORA-0054 :resource busy and acquire with NOWAIT specified.
如果 使用 FOR UPDATE 声明光标,则可在delete, update 语句中使用WHERE CURRENT OF 子句。
例6:
--节选自在线代码 forupdate.sql
DECLARE
V_NumCreadits classes.num_creadits%TYPE;
CURSOR c_RegisteredStudents IS
SELECT * FROM students
WHERE is IN ( SELECT student_id from registered_students
WHERE department = ‘HIS’ AND course = 101 )
FOR UPDATE OF current_credits;
BEGIN
FOR v_Studentinfo IN c_RegisteredStudents LOOP
SELECT num_credits INTO v_numcredits FROM classes
WHERE department =’HIS’ AND course=101;
UPDATE students
SET current_credits = current_credits + v_numcredits
WHERE CURRENT OF c_RegusteredStudents;
END LOOP;
COMMIT;
END; 你就当它是个确定按钮,如果用FOR UPDATE更新,一般得步骤是:
执行语句--锁--修改,插入--勾--解锁--提交
页:
[1]