Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

DI MANA SAAT INI di PL/SQL

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Paging dengan Oracle

  2. Perbedaan antara WITH klausa dan subquery?

  3. Oracle:Mengonversi Jumlah Mata Uang dalam Kata Menggunakan PL/SQL

  4. SQL Terus mendapatkan kesalahan dengan ON UPDATE CASCADE

  5. mendapatkan format tanggal yang tepat dari hasil pencarian SQL (datetime.datetime)