MySQL 5 – czego nie było wcześniej cd

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.