Funktionerne ligner meget Lagrede procedurer (SP), forskellen ligger i nogle detaljer, den vigtigste er, at de kun returnerer en værdi, når en SP kan returnere mere end en, derudover behøver vi ikke en variabel for at gemme den resulterende værdi, så det er meget lettere at bruge inden for en SELECT .
Oprettelse af en funktionFormålet med en funktion er at isolere logikken bag visse elementer, så de er lettere at bruge, på denne måde kan vi dokumentere databasen og dens drift og være i stand til at forenkle handlingerne i applikationen, der kunne kommunikere med basen af data. For at oprette en funktion bruger vi følgende elementer:
- Det Forespørgselsboks, hvor vi kan skrive funktionen.
- Ændringen af afgrænseren.
- Funktionens redigerings- og manipulationsmekanisme.
Lad os se, hvordan du definerer en funktion gennem et eksempel:
Opret FUNKTION get_country_name (param_country_code CHAR (2)) RETURNS VARCHAR (50) READS SQL DATA BEGIN DECLARE var_country_name VARCHAR (50) DEFAULT 'not found'; VÆLG beskrivelse FRA land HVOR kode = param_country_code INTO var_country_name; RETURN var_country_name; SLUT //Som vi kan se, ligner syntaksen meget på SP, kun her definerer vi ikke værdierne for I Y UD hvis ikke, at vi definerer de parametre, de indtaster og erklærer en enkelt værdi, der vil være VEND TILBAGE.
Når vi går til afsnittet af Rutiner På struktursiden i databasen ser vi det afspejles på følgende måde:
Når vi har oprettet vores funktion, lad os se, hvordan vi kan teste den, denne funktion, som vi bruger som en test, hvad den gør, er at rådføre sig med en tabel med lande og returnere navnet på et land, når vi beder om en kode, i tilfælde af ikke finder det, det returnerer os ikke fundet:
VÆLG CONCAT ('ca->', get_country_name ('ca'), ', zz->', get_country_name ('zz')) som test;Vi vælger ganske enkelt en CONCAT for at slutte resultaterne i en streng, og vi får følgende:
ca-> Canada, zz-> ikke fundetSom vi kan se, er det meget lettere end at konstruere de forespørgsler, som hvert land vil konsultere separat.
UdløserDet Udløser er forskellige fra funktionerne og Lagrede procedurerDisse behøver ikke at blive ringet op af brugeren, de vil forekomme, når der udføres en handling på bordet, som de er knyttet til, hvilket fører os til den anden forskel i funktionerne, det er, at de er generelle; det Udløser hvis de er knyttet til en bestemt tabel.
Lad os se, hvordan du opretter en Udløser:
Opret TRIGGER after_book_insert EFTER INSERT ON book FOR HVER Række BEGYND UPDATE forfatter SET total_page_count = total_page_count + NEW.page_count WHERE id = NEW.author_id; SLUT //Som vi kan se, skal vi også definere en ny afgrænser // inde i forespørgselsboksen, så vi kan inkludere alle instruktionerne i Udløser, i tilfælde af eksemplet forbinder vi det i Efter Indsæt det vil sige, efter at der er blevet indsat og derefter udført den definerede handling, hjælper dette databasen med at styre handlinger autonomt, når de sker.
En gang Udløser Når vi går til bordstruktursiden, vil vi se den tilgængelig: