MySQL Markøropplæring og eksempelkode

MySQL Markøropplæring og eksempelkode
Denne opplæringen vil gi deg en rask oversikt over bruk.

I de fleste tilfeller, når vi utfører SQL -spørsmål ved hjelp av verken MySQL Shell eller MySQL Workbench, lagrer vi ikke resultatene, selv om vi har funksjonaliteten for å lagre resultatene behandlet av serveren ved hjelp av en lagret prosedyre.

I denne opplæringen vil jeg ikke diskutere lagrede prosedyrer, funksjoner eller utløsere. I stedet vil jeg ganske enkelt dykke ned i å vise deg hvordan du kan bruke MySQL -markører til å kjøre resultatene i de lagrede prosedyrene.

Før vi begynner å lage og bruke en markør med eksempler, la oss ta et øyeblikk til å diskutere noen viktige punkter om en markør som du bør være klar over:

Funksjoner i en MySQL -markør

  1. En markør er skrivebeskyttet og kan ikke oppdatere eller fjerne data i resultatet som er angitt fra prosedyren.
  2. En markør må deklareres før den kan brukes. Markørdefinisjonen er bare et skritt for å fortelle MySQL at en slik markør eksisterer og ikke henter og data.
  3. Du kan bare hente data i den rekkefølgen som er spesifisert av SELECT-setningen og ikke i noen omvendt rekkefølge, ofte kjent som ikke-rollelig.
  4. Du bruker en markør ved å åpne den og deretter utføre Fetch -operasjoner på dataene som er lagret.
  5. Du må lukke en markør etter henteoperasjonene som er fullført.

Nå som vi vet hva en markør betyr, kan vi begynne å illustrere hvordan det fungerer ved å bruke eksempler i den virkelige verden:

Grunnleggende bruk

Den generelle syntaksen for å erklære en markør i MySQL er grei. Vi starter med å bruke erklærte nøkkelord som vist i eksemplet på spørringen nedenfor:

Hvordan erklære en markør

Erklære cursor_name markør for Select_expression;

Markensnavnet er navnet som er gitt til markøren under erklæringen. Legg merke til at erklæringen om en markør skal være etter at noen erklærte variabler for å forhindre at MySQL resulterer i feil.

Neste er Select_Expression, som lagrer Select -setningen tilknyttet markøren.

Hvordan åpne en markør

Når vi har erklært en markør og MySQL er klar over at markøren eksisterer, kan vi begynne å bruke den som krever at markøren åpnes.

Den generelle syntaksen for å åpne en markør er som vist i spørringen nedenfor:

Åpen Cursor_name;

Denne kommandoen åpner markørene som er referert med navnet sitt, og man kan begynne å bruke den.

Hvordan hente data

Å ha markøren åpen lar deg hente informasjonen som er lagret i enten en prosedyre, en funksjon eller en trigger.

Den generelle syntaksen for å hente data ved hjelp av en markør er som vist:

Hente cursor_name til variabler;

MERK: Forsikre deg om at markøren brukes etter at variablene er erklært for å unngå feil.

Hvordan lukke og slippe en markør

Når operasjonene som krever den definerte markøren er fullført, er det best å lukke markøren som frigjør minnet som er knyttet til den.

Når en markør er lukket, må en bruker åpne markøren på nytt ved hjelp av de åpne nøkkelordene (vist over) før du bruker markøren.

Du trenger ikke å erklære markøren etter den nære uttalelsen.

Den generelle syntaksen for å lukke en markør er som vist i spørringen nedenfor:

Lukk markørnavn;

Feilhåndtering

MySQL Markør fungerer ved rekursivt å lese neste rad i resultatsettet. Hvis neste rad ikke er tilgjengelig, vil markøren lukke og ikke returnere dataene med mindre det er spesifisert. Dette kan være et problem, spesielt etter at markøren når slutten av resultatet.

Som en løsning er en ikke funnet behandler definert. Dette spesifiserer handlingen som skal tas hvis neste rad ikke blir funnet.

Den generelle syntaksen for feilhåndtering når du bruker en markør er:

Erklære fortsette behandleren ikke funnet set terminat = sant;

Termininatverdien er en variabel som brukes til å spesifisere at markøren har nådd slutten av resultatet. Variabelnavnet kan være et hvilket.

MERK: Som alle variablene som brukes i en markør, må den defineres før den brukes i markøren.

Eksempel Bruk sak

La oss lage en markør som samler kundenes e -postmeldinger som er tilgjengelige i kundebordet i Sakila -eksempeldatabasen.

Ressursen for nedlasting og installasjon av Sakila -databasen er nedenfor:

https: // dev.mysql.com/doc/sakila/en/

Følgende illustrerer en prosedyre som bruker en markør for å hente e -post:

Bruk Sakila;
Avgrensning $$
Opprett prosedyre Createenewsletter (
Inout -e -postmeldinger varchar (4000)
)
BEGYNNE
Erklære avslutte int standard falsk;
Erklære e -postaddr varchar (255) standard "";
Erklære collect_email markør for valg av e -post fra Sakila.kunde hvor (adresse_id> 100 og adresse_id < 200);
Erklære fortsette behandler for ikke funnet sett terminat = true;
Åpne Collect_Email;
GetEmails: Loop
Hente Collect_email i e -postaddr;
Hvis avsluttes = sant da
La getemails;
SLUTT OM;
Sett e -post = concat (e -postaddr, "|", e -post);
End Loop Getemails;
Lukk Collect_email;
End $$
Avgrensning;
Set @emails = "";
Ring Createnewsletter (@Collect_Email);
Velg @Collect_Email;

Når spørringen er utført, vil du få en utdata som vist nedenfor:

Konklusjon

I denne opplæringen gikk vi gjennom å bruke MySQL -markører for å analysere dataene som er lagret i resultatsettet. Tenk på dokumentasjonen for å mestre hvordan du implementerer markørene.