Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

HIỆN TẠI Ở ĐÂU TRONG PL / SQL

Hãy xem khối này:

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;

Hai câu lệnh UPDATE tương đương nhau, WHERE CURRENT OF ... chỉ là một phím tắt cho WHERE ROWID = ... , bạn có thể sử dụng một trong hai.

Thực ra câu hỏi của bạn phải là "Tại sao chúng tôi cần FOR UPDATE ... ? "Lý do là ROWID có thể thay đổi bởi các hoạt động khác, ví dụ:ALTER TABLE ... SHRINK SPACE , không gian bảng di chuyển hoặc DML lớn. FOR UPDATE khóa hàng, tức là đảm bảo rằng ROWID không thay đổi cho đến khi bạn hoàn thành giao dịch của mình.

Không, bạn chỉ có thể mở khóa bằng cách hoàn tất giao dịch, tức là ROLLBACK hoặc 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. RDLC LocalReport Xuất sang Excel thực sự chậm

  2. Mã định danh PLS-00201 'PACKAGENAME.PROCEDURENAME' phải được khai báo

  3. Dữ liệu lớn SQL của Oracle

  4. Hàm bảng với bộ sưu tập hàng loạt ném loại dữ liệu không hợp lệ

  5. Tìm hiểu cách thực thi một thủ tục trong Toad For Oracle