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 proceduryDajPodwyzke(). -
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.
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”.RETURNS VARCHAR(3): Obiecujemy, że funkcja „odda” nam krótki tekst.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. |