Blog JSystems - uwalniamy wiedzę!

Szukaj

Słowo KURSOR pochodzi od łacińskiego słowa oznaczającego biegacza i dobrze opisuje działanie kursora w języku T-SQL: gdyż "biegnie" on przez zestaw danych, zwracających kolejne wiersze.

Kursory w T-SQL dzielimy na:

-statyczne – tylko do odczytu, jedno lub dwu kierunkowe

-kluczowe – do odczytu lub odczytu i aktualizacji, jedno lub dwu kierunkowe

-dynamiczne – są możliwe wszelkiego rodzaju zmiany na rekordach -błyskawiczne – nieprzewijane, tylko do odczytu.

Składnia

DECLARE nazwa_kursora CURSOR FOR instrukcja SELECT OPEN nazwa_kursora (otwiera kursor)

Pobranie kolejnego wiersza ( w T-SQL nie istnieją zmienne typu wierszowego, a więc trzeba wcześniej zadeklarować tyle zmiennych, ile wartości zwróci instrukcja SELECT kursora). Kolejność zwracania wartości/wierszy z kursora jest zgodna z instrukcją SELECT.

FETCH NEXT FROM nazwa_kursora INTO zmienne

Do sprawdzenia czy instrukcja FETCH zwróciła wiersz służy zmienna systemowa @@FETCH_STATUS (0 – udało się pobrać wiersz, 1 – nie ma dalszych wierszy (polecenie zakończyło się błędem, 2 – żądany wiersz nie istnieje – nie pobrano żadnego)

WHILE @@FETCH_STATUS = 0 ...

CLOSE nazwa_kursora (zwalnia zasoby oraz zwalnia ewentualne blokady)

DEALLOCATE nazwa_kursora (powoduje usunięcie definicji kursora)

Parametry

-FORWARD_ONLY (tworzy kursor przewijany tylko od pierwszego rekordu do ostatniego. Możliwa opcja FETCH NEXT (DEFAULT)) lub SCROLL (przewijanie - wszystkie opcje przewijania są możliwe)

-LOCAL (widoczny w ramach danej sesji) lub GLOBAL (widoczny również poza daną sesją)

 

Blokady:

READ_ONLY – powoduje, że kursor nie może modyfikować danych źródłowych.

SCROLL_LOCKS – powoduje, że dane źródłowe będą mogły być aktualizowane jedynie przez kursor. Każda inna instrukcja UPDATE wykonywana przez innego użytkownika nie wykona się ze względu na blokady zakładane przez kursor.

OPTIMISTIC – pozwala na aktualizację rekordów poprzez kursor i innych uzytkowników, nie gwarantuje jednak poprawności wykonania instrtukcji UPDATE wewnątrz kursora z uwagi na możliwy UPDATE przez inne sesje.

Typy:

STATIC – kopiuje tymczasowo dane z kursora do tabeli TEMPDB

KEYSET – określa kolejność w kursorze. Jeśli zapytanie nie posiada żadnego indexu UNIQUE konwertowany jest na STATIC

DYNAMIC – wszelkie modyfikacje są mozliwe

FAST_FORWARD – optymalizuje działanie kiursora z odpowiednimi opcjami przewijania

FETCH

Instrukcja FETCH pobiera dane z kursora, zgodnie z podaną informacją:

NEXT - pobiera następny rekord (DEFAULT)

PRIOR - pobiera poprzedni rekord

FIRST - pobiera pierwszy rekord

LAST - pobiera ostatni rekord

ABSOLUTE n - skok bezwzględny o n

RELATIVE n - skok bezwzględny o n

Poniżej prosty kod ukazujący działanie kursora:

 

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...