W języku SQL możemy tworzyć procedury i funkcje.
Procedura jest podprogramem utworzonym w SQL, która zawiera kod SQL oraz kod sterujący jej wykonaniem.
Procedury są przydatne wtedy, gdy chcemy wykonać jakieś często powtarzające się operacje.
Postać ogólna procedury
CREATE PROCEDURE nazwa_procedury (IN zmienna typ, OUT zmienna typ) BEGIN -- polecenia i kod SQL END
Przykład użycia
DELIMITER // CREATE PROCEDURE przecena (IN nazwa_towaru VARCHAR(64)) BEGIN UPDATE product SET suggested_price = suggested_price * 0.9 WHERE name = nazwa_towaru; END // DELIMITER ; call przecena('Bunny Boot');
1. Zaprojektować procedurę wynagrodzenia
, która dla podanego tytułu zawodowego obliczy, ile pracowników pracuje w danym zawodzie, jakie jest minimalne, maksymalne i średnie wynagrodzenie w tej grupie zawodowej.
2. Sprawdzić działanie procedury dla dwóch różnych grup zawodowych.
DELIMITER // CREATE PROCEDURE wynagrodzenia (IN grupaZawodowa VARCHAR(25)) BEGIN SELECT COUNT(*) as pracownicy, MIN(salary) as minimalne, MAX(salary) as maksymalne, AVG(salary) as srednie FROM emp WHERE title = grupaZawodowa; END // DELIMITER ;
3. Zaprojektować procedurę, która dla podanej nazwy departamentu wyświetli tytuł zawodowy, ilość pracowników, minimalne, maksymalne i średnie wynagrodzenie grup zawodowych pracujących w tym departamencie.
4. Sprawdzić działanie procedury dla dwóch różnych regionów.
DELIMITER // CREATE PROCEDURE pracownik_region (IN nazwaRegionu VARCHAR(50)) BEGIN SELECT R.name AS region, D.name AS departament, E.title AS tytulZawodowy, COUNT(*) AS pracownicy, MIN(E.salary) as minimalne, MAX(E.salary) as maksymalne, AVG(E.salary) as srednie FROM emp E INNER JOIN dept D ON E.dept_id=D.id INNER JOIN region R ON R.id=D.region_id WHERE R.name = nazwaRegionu GROUP BY E.title ORDER BY region, departament; END // DELIMITER ;
Mamo 🙁
A 'into'?
O jakie `into` chodzi?