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 Konstytu1309201106370920 witn saudi women for pdf elt updated1309201106370920 witn saudi women for pdf elt updated1302221458360222 witn cholera for pdf elt updatedBrandy Corvin Howling for the Vampire2007 01 Web Building the Aptana Free Developer Environment for AjaxCSharp Introduction to C# Programming for the Microsoft NET Platform (Prerelease)English for Medical S&D Practical English sentences keyplan for next iteration?CDF5ABBurn Rate Models for Gun PropellantsPalmer relation between moral reasoning and agression, and implications for practiceFOREX Systems Research Practical Fibonacci Methods For Forex Trading 2005Cooking Homemade Recipes For Many Thingstailor process for projectlFD05E2prepare environment for project 602A4więcej podobnych podstron