Oracle PL/SQL-Markøren: Implicit, Eksplicit, Markør FOR Loop [Eksempel]
Hvad er MARKØREN i PL/SQL?
en markør er en markør til dette kontekstområde. Oracle opretter kontekstområde til behandling af en S .l-erklæring, der indeholder alle oplysninger om erklæringen.
PL / s PLL giver programmøren mulighed for at styre kontekstområdet gennem markøren. En markør holder rækkerne returneret af S .l-sætningen. Sættet af rækker, som markøren holder, kaldes aktivt sæt., Disse markører kan også navngives, så de kan henvises fra et andet sted i koden.
i denne vejledning lærer du –
- Implicit Cursor
- eksplicit Cursor
- Cursor attributter
- For Loop Cursor statement
markøren er af to typer.
- Implicit Cursor
- eksplicit Cursor
Implicit Cursor
når der forekommer DML-operationer i databasen, oprettes en implicit markør, der holder de berørte rækker i den pågældende operation., Disse markører kan ikke navngives, og derfor kan de ikke kontrolleres eller henvises fra et andet sted i koden. Vi kan kun henvise til den seneste markør gennem markørattributterne.
eksplicit markør
programmører har lov til at oprette navngivet kontekstområde for at udføre deres DML-operationer for at få mere kontrol over det. Den eksplicitte markør skal defineres i erklæringsafsnittet i PL / S .l-blokken, og den oprettes til ‘SELECT’ – sætningen, der skal bruges i koden.
nedenfor er trin, der er involveret i at arbejde med eksplicitte markører.,
- at erklære markøren
at erklære markøren betyder blot at oprette et navngivet kontekstområde for den ‘vælg’ – erklæring, der er defineret i erklæringsdelen. Navnet på dette kontekstområde er det samme som markørnavnet.
- åbning af markøren
åbning af markøren vil instruere PL / S .l til at allokere hukommelsen til denne markør. Det vil gøre markøren klar til at hente posterne.
- hentning af Data fra markøren
i denne proces udføres ‘SELECT’ – sætningen, og rækkerne hentes gemmes i den tildelte hukommelse., Disse kaldes nu som aktive sæt. Hentning af data fra markøren er en aktivitet på rekordniveau, der betyder, at vi kan få adgang til dataene på en record-by-record måde.
hver hentningserklæring henter et aktivt sæt og indeholder oplysningerne om den pågældende post. Denne erklæring er den samme som’ SELECT ‘ – erklæring, der henter posten og tildeler variablen i ‘INTO’ – klausulen, men den vil ikke smide nogen undtagelser.
- lukning af markøren
Når al posten er hentet nu, skal vi lukke markøren, så hukommelsen, der er tildelt dette kontekstområde, frigives.,
syntaks:
- i ovenstående syntaks indeholder erklæringsdelen markørens erklæring og markørvariablen, hvor de hentede data vil blive tildelt.
- markøren oprettes for’ Vælg ‘ – sætningen, der er angivet i markørerklæringen.
- i eksekveringsdelen åbnes den deklarerede markør, hentes og lukkes.
Markørattributter
både Implicit markør og den eksplicitte markør har visse attributter, der kan tilgås. Disse attributter giver mere information om markøroperationerne., Nedenfor er de forskellige markørattributter og deres brug.
Markøren Attribut | Beskrivelse |
%FUNDET | returnerer den Booleske resultat ‘SAND’, hvis seneste hente drift hentede en rekord med succes, da det ellers vil returnere FALSE. |
%NOTFOUND | dette virker modsat %fundet det vil vende tilbage ‘TRUE’, hvis den seneste hentningsoperation ikke kunne hente nogen post., |
%ISOPEN | returnerer Boolsk resultat “SANDT”, hvis det givne markøren er allerede åbnet, ellers vender det tilbage “FALSKE” |
%ROWCOUNT | returnerer den numeriske værdi. Det giver det faktiske antal poster, der blev påvirket af DML-aktiviteten. |
eksempel 1: i dette eksempel vil vi se, hvordan du erklærer, åbner, henter og lukker den eksplicitte markør.
Vi vil projicere alle medarbejderens navn fra emp tabel ved hjælp af en markør., Vi bruger også markørattribut til at indstille løkken til at hente al posten fra markøren.
Output
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3
Kode Forklaring:
- Kode linje 2: at Erklære markøren guru99_det for udsagnet: “VÆLG emp_name FRA emp’.
- kode linje 3: erklære variabel lv_emp_name.
- kode linje 5: åbning af markøren guru99_det.
- kodelinje 6: Indstilling af Basic loop-sætningen for at hente alle poster i’ emp ‘ – tabellen.,
- Kode linje 7: Henter guru99_det data og tildele værdien til lv_emp_name.
- kodelinje 9: Brug markørattributten ‘% NOTFOUND ‘ for at finde ud af, om al posten i markøren er hentet. Hvis det hentes, vender det tilbage’ sandt’, og kontrollen går ud af løkken, ellers fortsætter kontrollen med at hente dataene fra markøren og udskrive dataene.
- kodelinje 11: UDGANGSBETINGELSE for loop-sætningen.
- kodelinje 12: Udskriv det hentede medarbejdernavn.,
- kodelinje 14: Brug markørattributten ‘%ro .count ‘ til at finde det samlede antal poster, der blev påvirket/hentet i markøren.
- kodelinje 15: efter at have forladt sløjfen lukkes markøren, og den tildelte hukommelse frigøres.
For Loop Cursor statement
“For LOOP” sætning kan bruges til at arbejde med markører. Vi kan give markørnavnet i stedet for rækkevidde i sætningen For loop, så løkken fungerer fra den første post af markøren til den sidste post af markøren., Markørvariablen, åbning af markøren, hentning og lukning af markøren udføres implicit af FOR-løkken.
syntaks:
DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
- i ovenstående syntaks indeholder erklæringsdelen markørens erklæring.
- markøren oprettes for’ Vælg ‘ – sætningen, der er angivet i markørerklæringen.
- i udførelsesdelen er den deklarerede markør setup i FOR loop og loop variablen ‘ I ‘ vil opføre sig som markørvariabel i dette tilfælde.,eksempel 1: i dette eksempel projicerer vi alt medarbejdernavnet fra emp-tabellen ved hjælp af en markør-for-løkke.
Output
Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY
Kode Forklaring:
- Kode linje 2: at Erklære markøren guru99_det for udsagnet: “VÆLG emp_name FRA emp’.
- kodelinje 4: konstruktion af ‘FOR’ – løkken til markøren med loop-variablen lv_emp_name.
- kodelinje 5: udskrivning af medarbejdernavnet i hver iteration af løkken.,
- kodelinje 8: Afslut sløjfen
Bemærk: I Cursor-for loop kan markørattributter ikke bruges, da åbning, hentning og lukning af markøren udføres implicit af For loop.