Kolejna rzecz, której nie było wcześniej to kursory. Świetnie nadają się one do pobierania danych z bazy i przemieszczanie się po nich.
Aby zacząć używać kursora trzeba go najpierw zadeklarować:
DECLARE nazwa_kursora CURSOR FOR SELECT pole FROM tabela;
Następnie należy go otworzyć:
OPEN nazwa_kursora
Aby pobrać kolejne wiersze uzyskane przez zapytanie zdefiniowane w kursorze używamy:
FETCH nazwa_kursora INTO a;
W tym przypadku a jest wcześniej zadeklarowaną zmienną. Powyższe polecenie zwykle występuje wewnątrz instrukcji REPEAT która umożliwia przejście po wszystkich wierszach pobranych przez kursor.
Gdy kursor przestanie być potrzebny zamykamy go:
CLOSE nazwa_kursora
Przykład użycia w procedurze:
CREATE PROCEDURE proccur()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a INT;
DECLARE kursor CURSOR FOR SELECT id FROM dane;
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000′ SET done = 1;
OPEN kursor;
REPEAT FETCH kursor INTO a;
IF a > 2 THEN
UPDATE dane SET nazwa=”a” WHERE id=a;
END IF;
UNTIL done END REPEAT;
CLOSE kursor;
END;
Zmienna done potrzebna jest aby wiedzieć kiedy kursor zakończy pobieranie danych z bazy. Instrukcja REPEAT przechodzi przez wszystkie wiersze tablicy dane i jeśli id danego rekordu jest większe od 2 zmienia wartość pola nazwa na “a”. Kiedy wszystkie wiersze zostaną przeglądnięte REPEAT zostaje zakończone, zamykamy kursor.