Funkcije pohranjene u MySQL

Sadržaj

Funkcije pohranjene u MySQL -u koriste se za inkapsuliranje izračuna ili operacija sa zapisima i poljima podataka koji su preuzeti iz SQL upita i uobičajeni su zadaci ili poslovna pravila.

Velika je prednost to što se mogu ponovno upotrijebiti, a programski jezik u kojem se funkcije razvijaju je kroz SQL izraze i uvjetne ili ponavljajuće se strukture.

Za razliku od pohranjene procedure, možete koristiti pohranjenu funkciju u SQL izrazima gdje koristite izraz koji vam omogućuje stvaranje uvjetnih pravila.

Pogledajmo primjer stvaranja baze podataka škole:

 IZRADI BAZU PODATAKA `fakultet`
Zatim stvaramo tablicu s ocjenama studentskih ispita
 - - Struktura tablice za tablice `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 ZADANO NULL, PRIMARNI KLJUČ (`id`)) COLLATE = 'latin1_swedish_ci' MOTOR = InnoDB - Indeksi tablice` notaseams` - ALTER TABLE` notasetest `DODAJ PRIMARNI KLJUČ (` id`); Zatim dodajemo neke podatke u tablicu examnotes - Dump podataka za tablicu `notasensam` INSERT INTO` notacijski ispit` (` id`, `idalumno`,` subjectid`, `note1`,` note2`, `note3`,` prosjek `,` stanje`) VRIJEDNOSTI (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 ',' ');

Zatim ćemo stvoriti pohranjenu funkciju koja će proći kroz cijelu tablicu ocjena i izračunati prosječnu ocjenu za svakog učenika po predmetu te ažurirati tablicu kako bi naznačila je li uspješan ili nije.

Funkciju možemo stvoriti iz Phpmyadmina ili bilo kojeg uređivača koji nam omogućuje pisanje SQL koda;

 CREATE DEFINER = `root` @` localhost` POSTUPAK `izračunati prosjek` () JEZIK SQL NIJE DETERMINISTIČKI SADRŽI SQL SQL SIGURNOSNI DEFINER KOMENTAR '' POČINJE / * Deklariram varijable za funkciju * ​​/ PROGLASI ZADNJU BOOL ZADNJU FALSE; IZJAVI id INT; DECLARE INT student; OBJAVI INT materiju; OGLASI note1 FLOAT; OGLASITE note2 FLOAT; OGLASITE note3 FLOAT; PROGLASITE maturalnu plovu; / * Deklariram skup zapisa ili kursor s podacima iz sql upita * / OGLASI rslist KURSOR ZA ODABIR id, studentski ID, materijalni materijal, note1, note2, note3 iz testnih bilješki; / * Deklariram varijablu za otkrivanje kraja ponavljajuće se petlje. PROGLAŠAVAJ NASTAVI RUKOVAČ ZA SQLSTATE '02000' SET final = TRUE; / * Otvaram skup zapisa da započnem obilazak podataka s petljom * / OTVORI rslista; petlja: LOOP FETCH rslist INTO id, student, subject, grade1, grade2, grade3; / * Izračunavam prosjek * / postavi prosjek = (napomena1 + bilješka2 + bilješka3) / 3; / * Spremam ga ažuriranjem tablice * / ažuriram zapise ispita prosjek = d gdje je idalumno = student i idmateria = subjekt; / * Ako je ocjena veća ili jednaka 7, ažuriram status kao Odobren, u protivnom će status biti Neuspješan * / AKO av>> 7 ONDA ažurirati notaseams postaviti status = 'Odobreno' gdje je idalumno = student i idmateria = subjekt; ELSE ažuriranje oznaka ispita status status = 'Nije uspjelo' gdje je id učenika = student i predmet predmeta = predmet; ZAVRŠI AKO; AKO JE ZATVORENO ZATVORI rslist; LEAVE petlja; ZAVRŠI AKO; KRAJ LOOP; KRAJ
Tada možemo izvršiti funkciju pomoću sljedeće naredbe:
 POZOVITE `izračunaj prosjek '()
Rezultat će biti automatsko ažuriranje stupaca prosjeka i statusa.

Funkcije pohranjene u MySQL -u obično se koriste za izračune i operacije, dok se pohranjene procedure obično koriste za izvršavanje poslovnih pravila.

Funkcije obično ne utječu na strukturu baze podataka, ali da bismo izveli neki izračun, usporedili i vratili rezultat ili izmijenili podatke u tablici u bazi podataka, također možemo stvoriti okidač za kontrolu ili reviziju promjena koje funkcija unese.

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave