Funkce uložené v MySQL

Obsah

Funkce uložené v MySQL se používají k zapouzdření výpočtů nebo operací se záznamy a datovými poli, která jsou převzata z dotazu SQL a jsou běžnými úkoly nebo obchodními pravidly.

Velkou výhodou je, že jsou opakovaně použitelné a programovací jazyk, ve kterém jsou funkce vyvíjeny, je prostřednictvím příkazů SQL a podmíněných nebo opakujících se struktur.

Na rozdíl od uložené procedury můžete použít uloženou funkci v příkazech SQL, kde používáte výraz, který vám umožňuje vytvářet podmíněná pravidla.

Podívejme se na příklad, kdy vytváříme databázi školy:

 VYTVOŘIT DATABÁZI `vysoká škola`
Dále vytvoříme tabulku se skóre studentských testů
 - - Struktura tabulky pro tabulku `examnotes` - CREATE TABLE` examnotes` (` id` INT (11) NOT NULL AUTO_INCREMENT, `idalumno` INT (11) NOT NULL,` material id` INT (11) NOT NULL, `note1 `DECIMAL (10,2) NOT NULL,` note2` DECIMAL (10,2) NOT NULL, `note3` DECIMAL (10,2) NOT NULL,` average` DECIMAL (10,2) NOT NULL, `state` VARCHAR (100) NULL DEFAULT NULL, PRIMARY KEY (`id`) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB - indexy tabulky` notaseams` - ALTER TABLE` notasetest` ADD PRIMARY KEY (`id`); Dále přidáme do tabulky examnotes nějaká data - výpis dat pro tabulku `notasensam` INSERT INTO` notation exam` (` id`, `idalumno`,` subjectid`, `note1`,` note2`, `note3`,` průměr`, `stav`) HODNOTY (1, 1000, 1, '8,00', '9,25', '7,00', '0,00', ''), (2, 1001, 1, '6,33', '8,50', '8,00', '0,00', ''), (3, 1002, 1, '10,00 ',' 7,50 ',' 8,33 ',' 0,00 ',' '), (4, 1003, 2,' 4,50 ',' 2,00 ',' 5,50 ',' 0,00 ',' '), (5, 1004, 1,' 3,50 ',' 2,00 ',' 4,00 ',' 0,00 ',' ');

Dále vytvoříme uloženou funkci, která projde celou tabulku známek a vypočítá průměrnou známku pro každého studenta podle předmětu a tabulku aktualizuje tak, aby označovala, zda je prospěšná nebo neúspěšná.

Funkci můžeme vytvořit z Phpmyadminu nebo jakéhokoli editoru, který nám umožňuje psát kód SQL;

 VYTVOŘIT DEFINER = `root` @` localhost` PROCEDURE `vypočítat průměr` () JAZYK SQL NENÍ DETERMINISTICKÉ OBSAHUJE SQL SQL BEZPEČNOSTNÍ DEFINÁTOR KOMENTÁŘ '' ZAČÍT / * Deklaruji proměnné pro funkci * / DECLARE final BOOL DEFAULT FALSE; DECLARE id INT; DECLARE INT student; VYHLÁSIT VNITŘNÍ hmotu; PROHLÁŠIT poznámku1 PLOCHÝ; PROHLASIT poznámku2 PLOCHÝ; VYHLÁSIT poznámku3 PLOCHÝ; PROHLÁŠENÍ promo FLOAT; / * Deklaruji sadu záznamů nebo kurzor s daty z dotazu sql * / DECLARE rslist CURSOR FOR SELECT id, student id, material id, note1, note2, note3 from test notes; / * Deklaruji proměnnou pro detekci konce opakující se smyčky DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET final = TRUE; / * Otevřu sadu záznamů a zahájím procházení dat smyčkou * / OPEN rslista; smyčka: LOOP FETCH rslist INTO id, student, předmět, stupeň1, stupeň2, stupeň3; / * Vypočítám průměr * / nastavím průměr = (poznámka1 + poznámka2 + poznámka3) / 3; / * Uložím aktualizací tabulky * / aktualizuji notaci zkoušky nastavenou průměr = d kde idalumno = student a idmateria = předmět; / * Pokud je známka větší nebo rovna 7, aktualizuji stav podle Schváleno, jinak bude stav Neprospěl * / IF av> = 7 PAK aktualizuje notaseams set status = 'Schváleno' kde idalumno = student a idmateria = předmět; JINAK Aktualizace zápisu zkoušky nastavena na status = 'Selhalo', kde id studenta = student a předmět id = předmět; KONEC IF; POKUD JE TO POTOM ZAVŘETE rslist; LEAVE smyčka; KONEC IF; KONEC SMYČKY; KONEC
Poté můžeme funkci spustit pomocí následujícího příkazu:
 CALL `vypočítat průměr` ()
Výsledkem bude automatická aktualizace sloupců průměr a stav.

Funkce uložené v MySQL se běžně používají pro výpočty a operace, zatímco uložené procedury se běžně používají pro provádění obchodních pravidel.

Funkce obvykle neovlivňují strukturu databáze, ale abychom mohli provést nějaký výpočet, porovnat a vrátit výsledek nebo upravit data v tabulce v databázi, můžeme také vytvořit spoušť pro ovládání nebo audit změn, které funkce provádí.

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave