Klauzula FOR UPDATE


Klauzula FOR UPDATE
Przy użyciu klauzuli FOR UPDATE możemy zablokować wiersze do edycji przez inne sesje. Działa to
na zasadzie transakcyjnej blokady zasobów. Jeśli my wykonamy jakiś UPDATE lub DELETE, wiersze
których te polecenia zostaną zablokowane do czasu zatwierdzenia lub wycofania transakcji. W tym
czasie inne sesje usiłujące dokonać jakiejkolwiek zmiany będą musiały oczekiwać na zwolnienie
zasobów przez nas. Najniższy poziom blokady to wiersz, tak więc nawet jeśli zmienimy zawartość
jednej kolumny, nikt nie będzie mógł zmienić również pozostałych kolumn w tych wierszach.
Klauzulę tę możemy wykorzystywać zarówno w SQL, jak i w kursorach w PL/SQL. Przykład użycia
w SQL:
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 1/8
Wyświetlam 3 osoby z departamentu nr 90 , jednocześnie blokując te wiersze do edycji przez inne
sesje. Teraz z innej sesji usiłuję te wiersze zmodyfikować:
Zauważ że modyfikuję inną kolumnę, niż te które wyświetlałem z pierwszej sesji. Sesja czeka na
zwolnienie zasobów. Możemy teraz swobodnie dokonać zmian, bez obawy że ktoś inny w
międzyczasie dokona jakichś zmian na  naszych wierszach.
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 2/8
Dopiero po wydaniu polecenia  COMMIT , wiersze zostają odblokowane i sesja która oczekiwała na
odblokowanie zasobów może dokonać zmian:
Klauzulę FOR UPDATE możemy wykorzystywać również w PL/SQL w kursorach. Samo
zadeklarowanie kursora nie spowoduje jednak blokady wierszy, jak się za chwilę przekonamy.
Uruchomiłem blok anonimowy z samą deklaracją kursora:
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 3/8
Aktualizacja z innej sesji przebiegła bez żadnych problemów:
Aby wiersze zostały zablokowane , kursor trzeba przynajmniej otworzyć:
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 4/8
Nie koniecznie musi to być otwarcie jawne, może być to również automatyczne otwarcie kursora które
następuje w pętli kursorowej, tak jak to widać poniżej:
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 5/8
Z wykorzystaniem klauzuli for update wiąże się również klauzula  WHERE CURRENT OF która
pozwala aktualizować lub kasować wiersze zablokowane przez kursor.
Istotna uwaga: klauzula WHERE CURRENT OF odnosi się do wiersza który właśnie został
zfetchowany z kursora.
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 6/8
Niezależnie od ilości wierszy w kursorze, klauzula WHERE CURRENT OF odnosi się do ostatnio
pobranego z kursora wiersza. Poniżej zastosowałem pętle kursorową, i jak widzimy zawsze ilość
zaktualizowanych wierszy wynosi 1.
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 7/8
W przypadku próby wykorzystania klauzuli WHERE CURRENT OF bez uprzedniego fetcha,
dostajemy błąd :
Bezpłatne materiały edukacyjne od JSystems. A.Klusiewicz www.jsystems.pl 8/8


Wyszukiwarka

Podobne podstrony:
62 FOR ostrzega Wprowadzenie klauzuli przeciwko unikaniu opodatkowania może być niezgodne z Konstytu
1309201106370920 witn saudi women for pdf elt updated
1309201106370920 witn saudi women for pdf elt updated
1302221458360222 witn cholera for pdf elt updated
Brandy Corvin Howling for the Vampire
2007 01 Web Building the Aptana Free Developer Environment for Ajax
CSharp Introduction to C# Programming for the Microsoft NET Platform (Prerelease)
English for Medical S&D Practical English sentences key
plan for next iteration?CDF5AB
Burn Rate Models for Gun Propellants
Palmer relation between moral reasoning and agression, and implications for practice
FOREX Systems Research Practical Fibonacci Methods For Forex Trading 2005
Cooking Homemade Recipes For Many Things
tailor process for projectlFD05E2
prepare environment for project 602A4

więcej podobnych podstron