Oracle
 sql >> Baza danych >  >> RDS >> Oracle

GDZIE OBECNY w PL/SQL

Spójrz na ten blok:

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;

Dwie instrukcje UPDATE są równoważne, WHERE CURRENT OF ... to tylko skrót do WHERE ROWID = ... , możesz użyć każdego z nich.

Właściwie twoje pytanie powinno brzmieć „Dlaczego potrzebujemy FOR UPDATE ... ?” Powodem jest to, że ROWID może się zmienić przez inne operacje, np. ALTER TABLE ... SHRINK SPACE , przesuwanie przestrzeni tabel lub duże DML. FOR UPDATE blokuje wiersz, tj. zapewnia, że ​​ROWID nie zmieni się do momentu zakończenia transakcji.

Nie, możesz zwolnić blokadę tylko kończąc transakcję, czyli ROLLBACK lub 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. przeczytaj pierwszy 1kb bloba z Oracle

  2. Initcap pomija słowa mniejsze niż 4 znaki

  3. Jak uśrednić przedziały czasowe?

  4. Jak wyświetlić listę wszystkich tabel w schemacie w Oracle SQL?

  5. ORA-01830 podczas konwersji liczby na słowa