INF.03
Temat 21 — Skrypty SQL · Procedury · Funkcje
0 / 540 XP

// Skrypty SQL, procedury składowane, funkcje

Automatyzacja powtarzalnych zadań na serwerze bazy danych — fundament egzaminu INF.03.

// SKRYPT BATCH

Plik .sql zawierający wiele poleceń wykonywanych sekwencyjnie. Tworzysz bazę, tabele, wstawiasz dane i nadajesz uprawnienia — jednym uruchomieniem.

// PROCEDURA SKŁADOWANA

Nazwany blok poleceń przechowywany na serwerze. Wywołujesz przez CALL. Może mieć parametry wejściowe (IN) i wyjściowe (OUT).

// FUNKCJA SKŁADOWANA

Podobna do procedury, ale zawsze zwraca wartość przez RETURN. Możesz jej użyć bezpośrednio w SELECT, tak jak wbudowanych funkcji SQL.

Cecha Skrypt BATCH PROCEDURA FUNKCJA
Przechowywanie na serwerze NIE — plik zewnętrzny TAK TAK
Zwraca wartość Opcjonalnie (OUT) Zawsze (RETURN)
Wywołanie Uruchomienie pliku CALL nazwa() SELECT nazwa()
Użycie w SELECT NIE NIE TAK
DELIMITER potrzebny NIE TAK TAK

// PRZYKŁAD — Skrypt batch

-- tworzenie bazy i tabeli w jednym skrypcie CREATE DATABASE szkolna; USE szkolna; CREATE TABLE uczniowie ( id INT PRIMARY KEY AUTO_INCREMENT, imie VARCHAR(30) NOT NULL, nazwisko VARCHAR(50) NOT NULL, rocznik INT CHECK (rocznik >= 2000) ); INSERT INTO uczniowie (imie, nazwisko, rocznik) VALUES ('Klaudia', 'Balcerek', 2008), ('Adam', 'Borek', 2009); CREATE USER 'praktykant'@'localhost' IDENTIFIED BY 'Szkolne123!'; GRANT SELECT ON szkolna.* TO 'praktykant'@'localhost'; FLUSH PRIVILEGES;

// PRZYKŁAD — Procedura składowana

DELIMITER $$ CREATE PROCEDURE PromoteRocznik() BEGIN UPDATE uczniowie SET rocznik = rocznik + 1; INSERT INTO logi (opis) VALUES ('Podniesiono rocznik'); END $$ DELIMITER ; -- Wywołanie: CALL PromoteRocznik();

// PRZYKŁAD — Funkcja składowana

DELIMITER $$ CREATE FUNCTION WiekUcznia(rok INT) RETURNS INT BEGIN RETURN YEAR(CURDATE()) - rok; END $$ DELIMITER ; -- Użycie w SELECT: SELECT imie, nazwisko, WiekUcznia(rocznik) AS wiek FROM uczniowie;

// Ćwiczenia SQL

Napisz podane polecenia. Sprawdzanie bazuje na kluczowych słowach i konstrukcjach.

ĆWICZENIE 01+80 XP
Napisz skrypt batch, który: tworzy bazę szkolna, wybiera ją (USE), tworzy tabelę uczniowie z kolumnami id (PK AUTO_INCREMENT), imie VARCHAR(30), rocznik INT z CHECK (>=2000).
Kolejność: CREATE DATABASE → USE → CREATE TABLE z CHECK (rocznik >= 2000)
ĆWICZENIE 02+80 XP
Utwórz procedurę DodajLog, która przyjmuje parametr IN opis_txt VARCHAR(100) i wstawia rekord do tabeli logi. Pamiętaj o DELIMITER.
DELIMITER $$ ... CREATE PROCEDURE ... BEGIN ... INSERT INTO logi ... END $$ ... DELIMITER ;
ĆWICZENIE 03+80 XP
Wywołaj procedurę DodajLog z parametrem 'Utworzenie konta', a następnie wywołaj ją ponownie z tekstem 'Zmiana hasła'.
CALL NazwaProcedury('parametr');
ĆWICZENIE 04+100 XP
Utwórz funkcję WiekUcznia, która przyjmuje parametr rok INT i zwraca typ INT — różnicę między bieżącym rokiem (YEAR(CURDATE())) a parametrem.
RETURN YEAR(CURDATE()) - rok;
ĆWICZENIE 05+100 XP
Napisz zapytanie SELECT, które wyświetla kolumny imie, nazwisko i wiek obliczony przez funkcję WiekUcznia(rocznik) jako alias wiek z tabeli uczniowie.
SELECT imie, nazwisko, WiekUcznia(rocznik) AS wiek FROM uczniowie;

// Demo — Budujemy procedurę krok po kroku

Kliknij kolejne kroki i obserwuj jak rośnie kod procedury i co zwraca na serwerze.

// PROCEDURA PromoteRocznik — 5 kroków

// AKTUALNY KOD
// CO DZIEJE SIĘ NA SERWERZE

// Dlaczego potrzebujemy DELIMITER?

MySQL domyślnie traktuje każdy ; jako koniec polecenia. W procedurach to problem — kliknij i zobacz dlaczego.

// WIZUALIZACJA — jak serwer widzi polecenia

Tryb parsowania: ⚠ Serwer myśli, że BEGIN kończy się po 1. średniku!

// WAŻNE — składnia DELIMITER w MySQL Workbench vs phpMyAdmin

ŚrodowiskoDELIMITER potrzebny?Uwagi
MySQL CLI / terminalTAK — obowiązkowyWpisuj DELIMITER $$ ręcznie
MySQL WorkbenchTAK — obowiązkowyIdentycznie jak CLI
phpMyAdminOpcjonalnyphpMyAdmin sam parsuje BEGIN...END
Skrypt .sql (batch)TAK — obowiązkowyBez niego skrypt zatrzyma się w połowie

// Quiz końcowy

5 pytań z zakresu skryptów, procedur i funkcji SQL. Każde +20 XP.

🏆

// LEKCJA UKOŃCZONA

Temat 21 — Skrypty SQL · Procedury · Funkcje

0 XP

z możliwych 540 XP

// CHECKLISTA UMIEJĘTNOŚCI