Samouczek kursora Mysql i przykładowy kod

Samouczek kursora Mysql i przykładowy kod
Ten samouczek da ci szybki podział korzystania z kursorów MySQL w procedurze przechowywanej, przechowywanych funkcjach lub wyzwalacz.

W większości przypadków podczas wykonywania zapytań SQL za pomocą MySQL Shell lub MySQL Workbench, nie zapisujemy wyników, nawet jeśli mamy funkcję, aby zapisać wyniki przetwarzane przez serwer za pomocą procedury przechowywanej.

W tym samouczku nie będę omawiać procedur, funkcji ani wyzwalaczy przechowywanych. Zamiast tego po prostu zanurzę się w pokazanie, w jaki sposób możesz użyć kursorów MySQL do uruchomienia wyników w procedurach przechowywanych.

Zanim zaczniemy tworzyć i używać kursora z przykładami, poświęćmy chwilę, aby omówić kilka kluczowych punktów na temat kursora, o którym powinieneś wiedzieć:

Cechy kursora mysql

  1. Kursor jest tylko odczyt i nie może aktualizować ani usuwać danych w zestawie wyników z procedury.
  2. Kursor musi zostać zadeklarowany, zanim będzie można go użyć. Definicja kursora jest tylko krokiem do poinformowania MySQL, że taki kursor istnieje i nie pobiera i danych.
  3. Możesz pobrać dane tylko w kolejności określonej przez instrukcję SELECT, a nie w żadnej odwrotnej kolejności, powszechnie znanej jako niepotrzebne.
  4. Używasz kursora, otwierając go, a następnie wykonuj operacje pobierania przechowywanych danych.
  5. Musisz zamknąć kursor po zakończeniu operacji pobierania.

Teraz, gdy wiemy, co oznacza kursor, możemy zacząć zilustrować, jak to działa przy użyciu przykładów w świecie rzeczywistym:

Podstawowe użycie

Ogólna składnia do deklarowania kursora w MySQL jest prosta. Zaczynamy od użycia słowa kluczowego Declare, jak pokazano w przykładowym zapytaniu poniżej:

Jak ogłosić kursor

Deklaruj kursor_name cursor_name dla Select_Expression;

Nazwa_kursor to nazwa nadana kursorowi podczas deklaracji. Zwróć uwagę, że deklaracja kursora powinna być po dowolnej zadeklarowanej zmiennych, aby zapobiec wyciągnięciu błędów MySQL.

Dalej jest Select_Expression, który przechowuje instrukcję Select powiązaną z kursorem.

Jak otworzyć kursor

Po ogłoszeniu kursora i MySQL jest świadomy, że kursor istnieje, możemy zacząć go używać, co wymaga otwarcia kursora.

Ogólna składnia do otwarcia kursora jest jak pokazano w zapytaniu poniżej:

Otwórz nazwę cursor_name;

To polecenie otwiera kursory, do których odwołuje się jego nazwa i można je zacząć używać.

Jak pobrać dane

Otwarcie kursora pozwala pobierać informacje przechowywane w procedurze, funkcji lub spustu.

Ogólna składnia do pobierania danych za pomocą kursora jest jak pokazano:

Fetch Cursor_name w zmienne;

NOTATKA: Jak wspomniano, upewnij się, że kursor jest używany po zadeklarowaniu zmiennych, aby uniknąć błędów.

Jak zamknąć i uwolnić kursor

Po zakończeniu operacji wymagających zdefiniowanego kursora najlepiej zamknąć kursor, który uwalnia powiązaną z nim pamięć.

Po zamknięciu kursora użytkownik musi ponownie otworzyć kursor za pomocą otwartego słów kluczowych (pokazanych powyżej) przed użyciem kursora.

Nie musisz deklarować kursora po bliskim stwierdzeniu.

Ogólna składnia w celu zamknięcia kursora jest jak pokazano w zapytaniu poniżej:

Zamknij nazwę cursor_name;

Obsługa błędów

Kursor MySQL działa poprzez rekurencyjne odczytanie następnego wiersza w zestawie wyników. Jeśli następny wiersz jest niedostępny, kursor zamknie i nie zwróci danych, chyba że określono. Może to stanowić problem, zwłaszcza po osiągnięciu kursora końca wyniku.

Jako rozwiązanie definiuje się nie znalezionego przewodnika. To określa działanie, które należy podjąć, jeśli następny wiersz nie zostanie znaleziony.

Ogólna składnia do obsługi błędów podczas korzystania z kursora to:

Deklaruj kontynuuj moduł obsługi nie znalezionego ustawionego termin = true;

Wartość zakończenia jest zmienną używaną do określenia, że ​​kursor osiągnął koniec wyniku. Nazwa zmiennej może być dowolną nazwą, o ile pasuje do konwencji nazewnictwa zmiennej MySQL.

NOTATKA: Podobnie jak wszystkie zmienne używane w kursorze, należy go zdefiniować, zanim zostanie użyta w kursorze.

Przykładowy przypadek użycia

Utwórzmy kursor, który gromadzi e -maile klientów dostępne w tabeli klientów przykładowej bazy danych Sakila.

Zasób do pobierania i instalowania bazy danych Sakila jest poniżej:

https: // dev.Mysql.com/doc/sakila/en/

Poniżej ilustruje procedurę wykorzystującą kursor do pobierania wiadomości e -mail:

Użyj Sakila;
Separator $$
Utwórz procedurę CreateNewsletter (
In -e -mail varchar (4000)
)
ZACZYNAĆ
Deklaruj zakończenie Int Domyślnie Fałsz;
Deklaruj e -mail varchar (255) domyślnie „”;
Deklaruj kursor kolekcji_email dla wybierz e -mail z Sakila.Klient gdzie (adres_id> 100 i adres_d < 200);
Deklaruj kontynuuj obsługę dla nie znalezionego ustawionego termin = true;
Open Collect_Email;
GETEMAILS: Pętla
Fetch collect_email na e -mail;
Jeśli zakończ = prawda, to
Opuść eamails;
Zakończyć, jeśli;
Set e -mail = concat (e -mailAddr, „|”, e -maile);
Końcowe pętla geteMails;
Close Collect_Email;
Koniec $$
Dymera;
Set @Emails = "";
Zadzwoń do CreateNewsletter (@Collect_Email);
Wybierz @Collect_Email;

Po wykonaniu zapytania otrzymasz wyjście, jak pokazano poniżej:

Wniosek

W tym samouczku przeszliśmy za pomocą kursorów MySQL, aby analizować dane przechowywane w zestawie wyników. Rozważ dokumentację, aby opanować sposób wdrożenia kursorów.