MySQL-ben az IF és CASE utasításokat használhatjuk elágazásokra a tárolt eljárásokban.
Ezek az utasítások lehetővé teszik, hogy összetett logikai műveleteket hajtsunk végre az adatbázison, és hogy a tárolt eljárásokat újrahasználhassuk.
Az IF utasítás lehetővé teszi, hogy feltételes műveleteket hajtsunk végre.
Az IF utasítás szintaxisa:
IF feltétel THEN
-- utasítások
ELSEIF feltétel THEN
-- utasítások
ELSE
-- utasítások
END IF;
Példa feladat:
Hozzunk létre egy tárolt eljárást, amely ellenőrzi, hogy egy diák 18 éves-e vagy sem. Küldjön vissza egy üzenetet.
A Students tábla a következő adatokat tartalmazza:
| StudentID | Name | Age |
|---|---|---|
| 1 | Anna | 20 |
| 2 | Béla | 16 |
| 3 | Csaba | 18 |
DELIMITER $$
CREATE PROCEDURE CheckAge(IN studentID INT)
BEGIN
DECLARE studentAge INT;
SELECT Age INTO studentAge
FROM Students
WHERE StudentID = studentID;
IF studentAge > 18 THEN
SELECT CONCAT('Diák ID: ', studentID, ' 18 évesnél idősebb.') AS Message;
ELSEIF studentAge = 18 THEN
SELECT CONCAT('Diák ID: ', studentID, ' 18 éves.') AS Message;
ELSE
SELECT CONCAT('Diák ID: ', studentID, ' fiatalabb 18 évesnél.') AS Message;
END IF;
END $$
DELIMITER ;
| Hívás | Eredmény | |
|---|---|---|
| Anna | CALL CheckAge(1); | "Diák ID: 1 18 évesnél idősebb." |
| Béla | CALL CheckAge(2); | "Diák ID: 2 fiatalabb 18 évesnél." |
| Csaba | CALL CheckAge(3); | "Diák ID: 3 18 éves." |
A CASE utasítás lehetővé teszi, hogy egy értéket összehasonlítsunk több lehetőséggel, és ennek alapján különböző műveleteket hajtsunk végre.
A CASE utasítás szintaxisa:
CASE
WHEN feltétel THEN
-- utasítások
WHEN feltétel THEN
-- utasítások
ELSE
-- utasítások
END CASE;
Példa feladat:
Hozzun létre egy tárolt eljárást, ami értékeli egy diák dolgozatát a pontszáma alapján és visszaad egy minősítést.
A minősítés az alábbiak szerint alakul:
A Grades tábla a következő adatokat tartalmazza:
| StudentID | Grade |
|---|---|
| 1 | 95 |
| 2 | 82 |
| 3 | 67 |
| 4 | 45 |
DELIMITER $$
CREATE PROCEDURE EvaluateGrade(IN studentID INT)
BEGIN
DECLARE studentGrade INT;
DECLARE gradeDescription VARCHAR(50);
SELECT Grade INTO studentGrade
FROM Grades
WHERE StudentID = studentID;
SET gradeDescription = CASE
WHEN studentGrade >= 90 THEN 'Kiváló'
WHEN studentGrade >= 75 THEN 'Jó'
WHEN studentGrade >= 60 THEN 'Közepes'
WHEN studentGrade >= 50 THEN 'Elégtelen'
ELSE 'Rossz'
END;
SELECT CONCAT('Diák ID: ', studentID, ' pontszáma: ', studentGrade, ', minősítés: ', gradeDescription) AS Evaluation;
END $$
c
DELIMITER ;
| Hívás | Eredmény | |
|---|---|---|
| 95 | CALL EvaluateGrade(1); | "Diák ID: 1 pontszáma: 95, minősítés: Kiváló" |
| 82 | CALL EvaluateGrade(2); | "Diák ID: 2 pontszáma: 82, minősítés: Jó" |
| 67 | CALL EvaluateGrade(3); | "Diák ID: 3 pontszáma: 67, minősítés: Közepes" |
| 45 | CALL EvaluateGrade(4); | "Diák ID: 4 pontszáma: 45, minősítés: Rossz" |
Feladat: A feladatok megoldásához használjuk a "JOIN, Nézetek feladat" mintadatait.
IF utasítás használatával:
Készítsünk egy tárolt eljárást, amellyel módosítani tudjuk egy diák jegyét! Az eljárás ellenőrizze, hogy az adott diák és tantárgy létezik-e, és ennek megfelelően módosítsa a jegyet.
Készítsünk egy tárolt eljárást, amely a diák azonosítója és a tantárgy azonosítója alapján megállapítja, hogy a diák "sikeres" vagy "sikertelen" a tantárgyban. A sikeres jegy min. 3-as. Az eljárás ellenőrizze, hogy az adott diák és tantárgy létezik-e, továbbá hogy az adott tantárgyból van-e jegye a diáknak.
CASE utasítás használatával:
Az eljárás ellenőrizze, hogy az adott diák és tantárgy létezik-e, továbbá hogy az adott tantárgyból van-e jegye a diáknak.