Lihat blok ini:
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;
Kedua pernyataan UPDATE setara, WHERE CURRENT OF ...
hanyalah jalan pintas untuk WHERE ROWID = ...
, Anda dapat menggunakan salah satunya.
Sebenarnya pertanyaan Anda seharusnya "Mengapa kami membutuhkan FOR UPDATE ...
?" Alasannya adalah, ROWID dapat diubah oleh operasi lain, misalnya ALTER TABLE ... SHRINK SPACE
, memindahkan tablespace atau DML besar. FOR UPDATE
mengunci baris, yaitu memastikan bahwa ROWID tidak berubah sampai Anda menyelesaikan transaksi Anda.
Tidak, Anda dapat melepaskan kunci hanya dengan menyelesaikan transaksi, yaitu ROLLBACK
atau COMMIT