⚙️
Skrypty batch, procedury i funkcje — interaktywnie
W tej lekcji napiszesz skrypty SQL, zdefiniujesz procedury i funkcje składowane, a potem zobaczysz efekty na przykładowych tabelach — tak jak robi to administrator bazy danych.
Twój postęp
0 XP
Poziom 1 / 400 XP
📜Batch
🧩Procedury
🧮Funkcje
⚙️Automatyzacja
🏁INF.03
1 · Skrypt batch
Budowa bazy szkolna jednym skryptem
+60 XP
Napisz skrypt, który tworzy bazę szkolna, tabelę uczniowie z ograniczeniem CHECK, wstawia 2 rekordy i nadaje uprawnienia odczytu użytkownikowi praktykant.
Twój skrypt SQL
Wskazówki: użyj CREATE DATABASE, USE, CREATE TABLE z CHECK, INSERT oraz GRANT SELECT dla użytkownika praktykant.
Symulator wykonania
Log działań
-- oczekuję na poprawny skrypt batch...
Tabela: uczniowie
id
imie
nazwisko
rocznik
2 · Procedura
Automatyczna promocja rocznika
+80 XP
Zdefiniuj procedurę PromoteRocznik(), która podnosi rocznik wszystkich uczniów o 1 i dopisuje wpis do tabeli logi. Następnie wywołaj ją poleceniem CALL PromoteRocznik();.
Twój SQL
Pamiętaj o zmianie DELIMITER, bloku BEGIN ... END i wywołaniu CALL.
Dane po promocji
Tabela: uczniowie
id
imie
nazwisko
rocznik
Tabela: logi
id
opis
3 · Funkcja
Funkcja WiekUcznia
+80 XP
Utwórz funkcję WiekUcznia(rok INT), która zwraca wiek ucznia na podstawie rocznika, a następnie użyj jej w zapytaniu SELECT, aby wyświetlić imię, nazwisko i wyliczony wiek.
Twój SQL
Wynik SELECT
Lista uczniów z wiekiem
imie
nazwisko
wiek
4 · Procedura + log
Procedura DodajLog
+60 XP
Stwórz tabelę logi oraz procedurę DodajLog(IN opis_txt VARCHAR(100)), która dopisuje wpis o dowolnej treści, a następnie wywołaj ją kilka razy.
Twój SQL
Zadbaj o AUTO_INCREMENT i domyślną datę w tabeli logi.
Aktualne logi
Tabela: logi
id
opis
5 · Funkcja tekstowa
Funkcja PelnyTekst
+80 XP
Dodaj funkcję PelnyTekst(imie_txt, nazwisko_txt), która zwraca pełne imię i nazwisko ucznia, a następnie użyj jej w zapytaniu, aby wyświetlić listę uczniów w postaci „Imię Nazwisko”.
Twój SQL
Lista uczniów
Kolumna: uczen
uczen
6 · Zadanie INF.03
System rekrutacji — skrypt projektowy
+100 XP
Przygotuj skrypt SQL, który tworzy bazę rekrutacja z tabelami kandydaci, kierunki, podania, a także procedurę DodajPodanie i funkcję OpisPodania, zwracającą tekst „Imię Nazwisko — Kierunek”.
Twój skrypt (wersja INF.03)
CREATE DATABASE rekrutacja;
USE rekrutacja;
CREATE TABLE kandydaci (
id INT PRIMARY KEY AUTO_INCREMENT,
imie VARCHAR(30) NOT NULL,
nazwisko VARCHAR(50) NOT NULL
);
CREATE TABLE kierunki (
id INT PRIMARY KEY AUTO_INCREMENT,
nazwa VARCHAR(100) NOT NULL
);
CREATE TABLE podania (
id INT PRIMARY KEY AUTO_INCREMENT,
kandydat_id INT NOT NULL,
kierunek_id INT NOT NULL,
data_zlozenia DATE DEFAULT (CURRENT_DATE),
FOREIGN KEY (kandydat_id) REFERENCES kandydaci(id),
FOREIGN KEY (kierunek_id) REFERENCES kierunki(id)
);
INSERT INTO kandydaci (imie, nazwisko)
VALUES ('Jan', 'Nowak'), ('Anna', 'Kowalska');
INSERT INTO kierunki (nazwa)
VALUES ('Informatyka'), ('Teleinformatyka');
DELIMITER $$
CREATE PROCEDURE DodajPodanie(
IN p_kandydat_id INT,
IN p_kierunek_id INT
)
BEGIN
INSERT INTO podania (kandydat_id, kierunek_id)
VALUES (p_kandydat_id, p_kierunek_id);
END $$
CREATE FUNCTION OpisPodania(p_id INT)
RETURNS VARCHAR(200)
BEGIN
DECLARE wynik VARCHAR(200);
SELECT CONCAT(k.imie, ' ', k.nazwisko, ' — ', ki.nazwa)
INTO wynik
FROM podania p
JOIN kandydaci k ON p.kandydat_id = k.id
JOIN kierunki ki ON p.kierunek_id = ki.id
WHERE p.id = p_id;
RETURN wynik;
END $$
DELIMITER ;
-- Przykład:
-- CALL DodajPodanie(1, 1);
-- SELECT OpisPodania(1) AS opis;
7 · Quiz
Sprawdź wiedzę!
5 pytań · 20 XP każde
Co to jest skrypt batch w SQL i kiedy go używamy?
Jak zdefiniować procedurę składowaną w MySQL?
Czym różni się procedura od funkcji składowanej?
Po co zmienia się DELIMITER przy tworzeniu procedur/funkcji?
Jak wywołać procedurę oraz jak użyć funkcji w zapytaniu SELECT?
Spróbuj odpowiedzieć samodzielnie, a potem porównaj z materiałem z teorii.
8 · Checklista
Umiesz to zrobić?
Tworzę skrypty batch do budowy i inicjalizacji bazy danych.
Definiuję procedury składowane z parametrami i potrafię je wywołać.
Tworzę funkcje składowane i wykorzystuję je w zapytaniach SELECT.
Potrafię zamienić opis zadania INF.03 na strukturę bazy i skrypty SQL.