Oracle PL / SQL Cursor: Implicit, Explicit, Cursor FOR Loop (Eksempel)

Innholdsfortegnelse:

Anonim

Hva er CURSOR i PL / SQL?

En markør er en pekepinn til dette kontekstområdet. Oracle oppretter kontekstområde for behandling av en SQL-setning som inneholder all informasjon om utsagnet.

PL / SQL lar programmereren kontrollere kontekstområdet gjennom markøren. En markør inneholder radene som returneres av SQL-setningen. Settet med rader markøren har, blir referert til som aktivt sett. Disse markørene kan også navngis slik at de kan henvises fra et annet sted i koden.

I denne veiledningen vil du lære-

  • Implisitt markør
  • Eksplisitt markør
  • Markørattributter
  • FOR Loop Cursor statement

Markøren er av to typer.

  • Implisitt markør
  • Eksplisitt markør

Implisitt markør

Når noen DML-operasjoner forekommer i databasen, opprettes en implisitt markør som inneholder de berørte radene, i den aktuelle operasjonen. Disse markørene kan ikke navngis, og de kan derfor ikke kontrolleres eller henvises fra et annet sted i koden. Vi kan bare referere til den siste markøren gjennom markørattributtene.

Eksplisitt markør

Programmører har lov til å opprette navngitt kontekstområde for å utføre DML-operasjoner for å få mer kontroll over det. Den eksplisitte markøren skal defineres i erklæringsdelen av PL / SQL-blokken, og den opprettes for "SELECT" -uttrykket som må brukes i koden.

Nedenfor er trinn som involverte seg i å jobbe med eksplisitte markører.

  • Erklærer markøren

    Å erklære markøren betyr ganske enkelt å opprette et navngitt kontekstområde for 'SELECT' -uttrykket som er definert i erklæringsdelen. Navnet på dette kontekstområdet er det samme som markørnavnet.

  • Åpningsmarkør

    Åpne markøren vil gi PL / SQL beskjed om å tildele minnet til denne markøren. Det vil gjøre markøren klar til å hente postene.

  • Henter data fra markøren

    I denne prosessen kjøres 'SELECT' -utsagnet og radene som hentes lagres i det tildelte minnet. Disse kalles nå som aktive sett. Å hente data fra markøren er en aktivitet på postnivå som betyr at vi kan få tilgang til dataene på en post-for-post måte.

    Hver hentingsuttalelse henter ett aktivt sett og inneholder informasjonen for den aktuelle posten. Denne påstanden er den samme som 'SELECT' -uttrykk som henter posten og tildeler variabelen i 'INTO' -klausulen, men den gir ingen unntak.

  • Lukke markøren

    Når all posten er hentet nå, må vi lukke markøren slik at minnet som er tildelt dette kontekstområdet vil bli frigitt.

Syntaks:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • I ovennevnte syntaks inneholder erklæringsdelen erklæringen til markøren.
  • Markøren blir opprettet for "SELECT" -uttalelsen som er gitt i markørerklæringen.
  • I utførelsesdelen er den erklærte markøren satt opp i FOR-sløyfen, og sløyfevariabelen 'I' vil oppføre seg som markørvariabel i dette tilfellet.

Eksempel 1 : I dette eksemplet vil vi projisere alt ansattens navn fra emp-tabellen ved hjelp av en markør-FOR-løkke.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Produksjon

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Kode Forklaring:

  • Kodelinje 2 : Erklærer markøren guru99_det for utsagnet 'VELG emp_name FRA emp'.
  • Kodelinje 4 : Konstruere 'FOR' sløyfen for markøren med sløyfevariabelen lv_emp_name.
  • Kodelinje 5: Skriver ut ansattens navn i hver iterasjon av sløyfen.
  • Kodelinje 8: Gå ut av sløyfen

Merk: I markør-FOR-løkke kan ikke markørattributter brukes siden åpning, henting og lukking av markøren implisitt gjøres av FOR-løkke.