Funcțiile stocate în MySQL sunt utilizate pentru a încapsula calcule sau operații cu înregistrări și câmpuri de date care sunt preluate dintr-o interogare SQL și sunt sarcini obișnuite sau reguli de afaceri.
Un mare avantaj este că sunt reutilizabile și limbajul de programare în care sunt dezvoltate funcțiile este prin instrucțiuni SQL și structuri condiționale sau repetitive.
Spre deosebire de o procedură stocată, puteți utiliza o funcție stocată în instrucțiunile SQL în care utilizați o expresie care vă permite să creați reguli condiționale.
Să vedem un exemplu în care creăm o bază de date a unei școli:
CREAȚI BAZA DE DATE `colegiu`Apoi creăm un tabel cu scorurile testelor elevilor
- - Structura tabelului pentru tabelul „note” - 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,` mediu` DECIMAL (10,2) NOT NULL, `state` VARCHAR (100) NULL DEFAULT NULL, CHEIE PRIMARĂ ("id")) COLLATE = 'latin1_sw Swedish_ci' ENGINE = InnoDB - Indexuri ale tabelului `notaseams` - ALTER TABLE` notasetest` ADAUGĂ CHEIE PRIMARĂ („ id ”); Apoi adăugăm câteva date la examenul de tabel - Dump de date pentru tabelul "notasensam" INSERT INTO "notation exam" ("id", "idalumno", "subjectid", "note1", "note2", "note3", " medie "," stare ") VALORI (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 ',' ');
Apoi, vom crea o funcție stocată care va parcurge întregul tabel de note și vom calcula nota medie pentru fiecare elev pe materii și vom actualiza tabelul pentru a indica dacă este Aprobat sau Eșuat.
Putem crea funcția de la Phpmyadmin sau de la orice editor care ne permite să scriem cod SQL;
CREATE DEFINER = "root" @ "localhost" PROCEDURA `calculate average` () LANGUAGE SQL NOT DETERMINISTIC CONTA SQL SQL SECURITY DEFINER COMMENT" BEGIN / * Declar variabile pentru funcția * / DECLAR final BOOL DEFAULT FALSE; DECLARA id-ul INT; DECLARA student INT; DECLARA INT materie; DECLARAți nota1 FLOAT; DECLARA nota2 FLOAT; DECLARA nota 3 FLOAT; DECLARA balul FLOAT; / * Declar un set de înregistrări sau un cursor cu datele din interogarea SQL * / DECLARE rslist CURSOR PENTRU SELECT id, id student, material id, note1, note2, note3 din test notes; / * Declar o variabilă pentru a detecta sfârșitul unei bucle repetate DECLARA CONTINUARE MANIPULATOR PENTRU SQLSTATE '02000' SET final = TRUE; / * Deschid setul de înregistrări pentru a începe traversarea datelor cu o buclă * / OPEN rslista; buclă: LOOP FETCH rslist INTO id, student, subject, grade1, grade2, grade3; / * Calculez media * / set avg = (nota1 + nota2 + nota3) / 3; / * Îl salvez actualizând tabelul * / actualizați notarea examenului set mediu = d unde idalumno = student și idmateria = subiect; / * Dacă nota este mai mare sau egală cu 7, actualizez starea ca Aprobat, altfel starea va fi eșuată * / IF av> = 7 THEN update notaseams set status = 'Aprobat' unde idalumno = student și idmateria = subiect; ELSE update exam notation set status = 'Failed' unde student id = student și subject id = subject; ÎNCHEI DACĂ; IF finalTHEN CLOSE rslist; Buclă LEAVE; ÎNCHEI DACĂ; END LOOP; SFÂRȘITApoi putem executa funcția folosind următoarea comandă:
SUNA `calculează media` ()Rezultatul va fi actualizarea automată a coloanelor medii și de stare.
Funcțiile stocate în MySQL sunt utilizate în mod normal pentru calcule și operațiuni, în timp ce procedurile stocate sunt utilizate în mod normal pentru executarea regulilor de afaceri.
Funcțiile nu afectează de obicei structura bazei de date, dar pentru a efectua unele calcule, a compara și a returna un rezultat sau pentru a modifica datele dintr-un tabel din baza de date, putem crea, de asemenea, un declanșator pentru a controla sau audita modificările pe care le face o funcție.
V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv