Tárolt eljárások - Elágazások

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.

IF utasítás

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."

CASE utasítás

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:

  1. 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.

  2. 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:

  1. 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 milyen a diák teljesítménye az alábbi szabályok alapján:

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.