Funksjonene ligner veldig på Lagrede prosedyrer (SP), forskjellen ligger i noen detaljer, den viktigste er at de bare returnerer én verdi, når en SP kan returnere mer enn én, i tillegg trenger vi ikke en variabel for å lagre den resulterende verdien, så det er mye lettere å bruke i en SELECT .
Opprette en funksjonMålet med en funksjon er å isolere logikken bak visse elementer slik at de er enklere å bruke, på denne måten kan vi dokumentere databasen og dens drift og være i stand til å forenkle handlingene til applikasjonen som kan kommunisere med basen til data. For å lage en funksjon bruker vi følgende elementer:
- De Spørringsboks, der vi kan skrive funksjonen.
- Endringen av skilletegn.
- Funksjonens redigerings- og manipuleringsmekanisme.
La oss se hvordan vi definerer en funksjon gjennom et eksempel:
CREATE FUNCTION get_country_name (param_country_code CHAR (2)) RETURNS VARCHAR (50) READS SQL DATA BEGIN DECLARE var_country_name VARCHAR (50) DEFAULT 'ikke funnet'; VELG beskrivelse FRA land HVOR kode = param_country_code INTO var_country_name; RETURN var_country_name; SLUTT //Som vi kan se, er syntaksen veldig lik den for SP, bare her definerer vi ikke verdiene til I Y UTE hvis ikke at vi definerer parametrene de angir og erklærer en enkelt verdi som vil være KOMME TILBAKE.
Når vi går til delen av Rutiner På struktursiden i databasen ser vi den reflektert på følgende måte:
Etter at vi har opprettet funksjonen vår, la oss se hvordan vi kan teste den. Denne funksjonen som vi bruker som en test, er hva den tar opp mot en tabell over land og returnerer navnet på et land når vi ber om en kode, i tilfelle Hvis vi ikke finner det, returnerer det oss ikke funnet:
VELG CONCAT ('ca->', get_country_name ('ca'), ', zz->', get_country_name ('zz')) som test;Vi velger ganske enkelt en CONCAT for å bli med resultatene i en streng, og vi får følgende:
ca-> Canada, zz-> ikke funnetSom vi kan se, er det mye enklere enn å konstruere spørsmålene som hvert land vil konsultere separat.
UtløsereDe Utløsere er forskjellige fra funksjonene og Lagrede prosedyrerDisse trenger ikke å bli oppringt av brukeren, de vil oppstå når en handling utføres på bordet de er knyttet til, noe som fører oss til den andre forskjellen mellom funksjonene, det er at de er generelle; de Utløsere hvis de er knyttet til en bestemt tabell.
La oss se hvordan du lager en Avtrekker:
CREATE TRIGGER after_book_insert ETTER INSERT ON book FOR HVER RAD BEGIN UPDATE author SET total_page_count = total_page_count + NEW.page_count WHERE id = NEW.author_id; SLUTT //Som vi kan se, må vi også definere en ny skilletegn // inne i søkeboksen slik at vi kan inkludere alle instruksjonene i Avtrekker, når det gjelder eksemplet, kobler vi det til i Etter Sett inn det vil si, etter å ha gjort en innsetting og deretter utført den definerte handlingen, hjelper dette databasen med å håndtere handlinger autonomt etter hvert som de skjer.
Først når Avtrekker Når vi går til tabellstruktursiden, vil vi se den tilgjengelig: