इस ब्लॉक पर एक नज़र डालें:
DECLARE
CURSOR c1 IS
SELECT course_number, ROWID AS RID
FROM courses_tbl
FOR UPDATE;
begin
FOR aCourse IN c1 LOOP
UPDATE courses_tbl SET course_number = aCourse.course_number + 1
WHERE CURRENT OF c1;
UPDATE courses_tbl SET course_number = aCourse.course_number + 1
WHERE ROWID = aCourse.RID
end loop;
end;
दो अद्यतन विवरण समतुल्य हैं, WHERE CURRENT OF ...
WHERE ROWID = ...
. के लिए सिर्फ एक शॉर्टकट है , आप दोनों में से किसी का भी उपयोग कर सकते हैं।
वास्तव में आपका प्रश्न होना चाहिए "हमें FOR UPDATE ...
की आवश्यकता क्यों है? ?" इसका कारण यह है कि ROWID अन्य ऑपरेशनों द्वारा बदल सकता है, जैसे ALTER TABLE ... SHRINK SPACE
, चलती टेबलस्पेस या बड़े डीएमएल। FOR UPDATE
पंक्ति को लॉक करता है, यानी यह सुनिश्चित करता है कि जब तक आप अपना लेन-देन पूरा नहीं कर लेते, तब तक ROWID नहीं बदलेगा।
नहीं, आप केवल लेन-देन पूरा करके ही ताला जारी कर सकते हैं, अर्थात ROLLBACK
या COMMIT