Procedury i Funkcje składowane w MySQL

Wyobraźmy sobie, że baza danych to nie tylko "szafa z segregatorami" (tabelami), ale inteligentny asystent. Zamiast za każdym razem tłumaczyć mu: „znajdź nauczyciela, sprawdź jego staż, wylicz podwyżkę i zapisz wynik”, możemy nauczyć go gotowych instrukcji.


1. Dlaczego w ogóle ich używamy?

Zanim przejdziemy do kodu, ustalmy po co to komu:

  • Wygoda: Zamiast pisać 10 linii kodu w PHP czy Pythonie, wywołujemy jedną komendę w SQL.

  • Bezpieczeństwo: Użytkownik nie musi mieć dostępu do tabeli Nauczyciele, może mieć dostęp tylko do procedury DajPodwyzke().

  • Szybkość: Baza danych wykonuje te polecenia znacznie szybciej „u siebie” niż gdyby przesyłała dane do zewnętrznego programu.


2. Funkcje Składowane (Stored Functions) – „Mały Kalkulator”

Zasada: Funkcja ma coś obliczyć i zawsze zwrócić nam wynik (jedną wartość).

Przykład: Czy uczeń jest pełnoletni?

W tabeli Uczniowie mamy kolumnę data_urodzenia. Stwórzmy funkcję, która sprawdzi, czy uczeń ma 18 lat.

  1. DELIMITER //: Mówimy bazie: „Hej, ignoruj na chwilę średniki, bo będę pisać długi blok kodu. Dopiero jak zobaczysz //, to znaczy, że skończyłem”.
  2. RETURNS VARCHAR(3): Obiecujemy, że funkcja „odda” nam krótki tekst.
  3. IF ... THEN: Klasyczna instrukcja warunkowa, jak w każdym języku programowania.

Użycie: SELECT imie, nazwisko, CzyPelnoletni(data_urodzenia) FROM Uczniowie;


3. Procedury Składowane (Stored Procedures) – „Wykonawca zadań”

Zasada: Procedura nie musi nic zwracać. Jej zadaniem jest coś zrobić (dodać, usunąć, zmienić dane).

Przykład: Automatyczne wystawianie oceny "na start"

Załóżmy, że każdy nowy uczeń w klasie 1A musi dostać ocenę 5.0 z Informatyki na powitanie.

Kluczowe słowo IN: Oznacza parametr wejściowy. Procedura pyta: „Dla jakiego ID mam to zrobić?”.

Użycie: CALL DodajOcenePowitalna(15); – I uczeń o ID 15 właśnie dostał piątkę z informatyki.


4. Porównanie

Cecha Funkcja (Function) Procedura (Procedure)
Główny cel Obliczenie czegoś (np. średnia, wiek). Wykonanie akcji (np. zmiana pensji, dodanie ucznia).
Wynik Zawsze zwraca jedną wartość (RETURN). Może nie zwracać nic lub wiele zestawów danych.
Gdzie używamy? Wewnątrz SELECT (jak kolumny). Wywoływana oddzielnie przez CALL.
Przykład z życia Kalkulator na biurku. Pracownik biurowy wykonujący zlecenie.