BD-1st-2.4-lab12.tresc-1.1-Slajd6
Deklarowanie kursora (2)
Cd. z poprzedniego slajdu. Ostatnim, opcjonalnym elementem deklaracji kursora jest klauzula FOR UPDATE, która określa, że rekordy, odczytywane z bazy danych przez kursor, mogą być zmodyfikowane w programie przez zlecenia UPDATE lub usunięte przez DELETE. Należy mieć świadomość, że przy otwieraniu takiego kursora na rekordach, odczytanych przez zapytanie kursora, zostają założone blokady. Pełną postać klauzuli, „FOR UPDATE OF lista_atrybutów”, używa się wtedy, gdy zapytanie kursora zawiera połączenie, a zablokowane mają zostać rekordy tylko jednej z relacji, biorących udział w połączeniu. W takim przypadku lista_atrybutów powinna zawierać dowolny atrybut z relacji, która ma być blokowana. W przypadku pominięcia listy atrybutów zablokowane zostaną rekordy wszystkich relacji, biorących udział w połączeniu.
W przykładzie, zaprezentowanym na bieżącym slajdzie, zadeklarowano trzy kursory. Pierwszy kursor o nazwie cur_zespoly jest kursorem bezparametrowym, odczytującym wszystkie informacje z relacji ZESPOLY. Kolejny kursor, cur_pracownicy, posiada jeden parametr liczbowy o nazwie p_id_zesp, a zapytanie kursora odczytuje imiona, nazwiska i płace pracowników, zatrudnionych w zespole, którego identyfikator zawiera parametr (parametr jest użyty w klauzuli WHERE do filtrowania wyniku zapytania). Ostatni kursor, c_pracownicy_2, to przykład kursora, którego zapytanie nie jest jeszcze znane. Kursor będzie odczytywał z bazy danych rekordy, których struktura będzie taka sama, jak struktura jednego rekordu relacji PRACOWNICY.