En markør for loop er en forlengelse av for -loopen i PL/SQL og lar deg utføre en kodeblokk for hver rad i et resulterende sett. Dette er veldig nyttig, da det lar deg raskt og effektivt utføre omfattende beregninger i en enkelt beregning uten å laste inn dataene i minnet.
Oracle markør for loop
For Loop henter en rad fra det resulterende settet inn i loopindeksen for hver iterasjon. Hvis det ikke er noen rad, lukker for loop markøren.
Følgende viser den grunnleggende syntaksen til markøren for sløyfe i Oracle:
For rekord i markørnavn
LØKKE
-- Bruk denne blokken på hver rad
Endesløyfe;
I den medfølgende syntaksen representerer posten variabelnavnet som forhåndspresenterer hver rad i markøren.
Cursor_name in the Loop spesifiserer en eksplisitt markør som du ønsker å sløyfe gjennom. Merk at en markør må være åpen og hentet inn i posten før du bruker den i en markør for loop.
Hvis du ikke ønsker å lage en eksplisitt markør, oppretter for -loopen implisitt en løkkeindeks som en postvariabel av %radtype når du hopper over cursor_name.
Oracle Markør for sløyfeeksempel
La oss se på noen grunnleggende eksempler på markøren for Loop in Oracle Databases.
erklære
Markør emp_cursor er
Velg First_name, Last_name
fra ansatte;
begynne
for ansatt i emp_cursor
Løkke
Dbms_output.Put_line (ansatt.First_name || "|| Ansatt.etternavn);
endesløyfe;
slutt;
I den oppgitte koden erklærer vi en markør som heter emp_cursor. Vi befolker deretter denne markøren med dataene fra de ansattes tabell ved hjelp.
Deretter bruker vi en markør for loop for å hente og behandle dataene i hver rad fra resultatsettet. Merk at den ansattvariabelen lagrer hver rad i emp_cursor.
Loopen sammenkobler det første_navnet og Last_name kolonnene og skriver ut resultatet ved å bruke DBMS_Output.Put_line -funksjonen.
Databasemotoren lukker automatisk markøren når sløyfen avsluttes.
Dette bør returnere følgende resultater, og demonstrere hvordan vi kan bruke en eksplisitt markørdefinisjon for å behandle data fra en tabell:
Oracle Implicit Markør
Hvis du ikke ønsker å lage en eksplisitt markør, kan du la databasemotoren lage en og administrere den for deg ved å utelate markørnavnet som vist i følgende:
BEGYNNE
For ansatt i (velg First_name, Last_name
Fra ansatte) loop
Dbms_output.Put_line (ansatt.First_name || "|| Ansatt.etternavn);
Endesløyfe;
SLUTT;
Dette bør gi et lignende resultat som en eksplisitt markør.
Konklusjon
I dette innlegget kom du over markøren for loop i Oracle -databaser for å hente og behandle hver rad fra et resultatsett.