Oracle PL/SQL Cursor: impliciet, expliciet, Cursor voor Loop [voorbeeld]
Wat is CURSOR in PL / SQL?
een Cursor is een verwijzing naar dit contextgebied. Oracle maakt een contextgebied voor het verwerken van een SQL-statement dat alle informatie over het statement bevat.
PL / SQL staat de programmeur toe om het contextgebied via de cursor te beheren. Een cursor bevat de rijen die worden geretourneerd door het SQL-statement. De reeks rijen die de cursor vasthoudt wordt aangeduid als actieve set., Deze cursors kunnen ook worden genoemd, zodat ze kunnen worden doorverwezen vanaf een andere plaats van de code.
in deze tutorial leert u-
- impliciete Cursor
- expliciete Cursor
- Cursor attributen
- voor lus Cursor statement
de cursor bestaat uit twee typen.
- impliciete Cursor
- expliciete Cursor
impliciete Cursor
wanneer DML-bewerkingen in de database voorkomen, wordt een impliciete cursor aangemaakt die de betrokken rijen bevat, in die specifieke bewerking., Deze cursors kunnen niet worden genoemd en kunnen daarom niet worden gecontroleerd of doorverwezen vanuit een andere plaats van de code. We kunnen alleen verwijzen naar de meest recente cursor via de cursor attributen.
expliciete Cursor
programmeurs mogen een benoemde context maken om hun DML-bewerkingen uit te voeren om er meer controle over te krijgen. De expliciete cursor moet worden gedefinieerd in de declaratie sectie van het PL/SQL blok, en het is gemaakt voor de ‘SELECT’ statement dat moet worden gebruikt in de code.
hieronder staan stappen die betrokken zijn bij het werken met expliciete cursors.,
- declareren van de cursor
declareren van de cursor betekent gewoon één bepaald contextgebied maken voor het’ SELECT ‘ – statement dat is gedefinieerd in het declaratiegedeelte. De naam van dit contextgebied is hetzelfde als de cursor naam.
- Openingscursor
het openen van de cursor geeft de PL / SQL opdracht het geheugen voor deze cursor toe te wijzen. Het maakt de cursor klaar om de records op te halen.
- Gegevens ophalen van de Cursor
In dit proces wordt het ‘SELECT’ – statement uitgevoerd en worden de rijen opgehaald in het toegewezen geheugen opgeslagen., Deze worden nu als actieve verzamelingen genoemd. Het ophalen van gegevens van de cursor is een activiteit op recordniveau die betekent dat we toegang hebben tot de gegevens op een record-voor-record manier.
elk fetch-statement zal een actieve set ophalen en bevat de informatie van dat specifieke record. Dit statement is hetzelfde als’ SELECT ‘ statement dat het record ophaalt en toewijst aan de variabele in de ‘INTO’ clausule, maar het zal geen uitzonderingen gooien.
- het sluiten van de Cursor
zodra alle record nu is opgehaald, moeten we de cursor sluiten zodat het geheugen dat is toegewezen aan dit contextgebied wordt vrijgegeven.,
Syntax:
- in de bovenstaande syntaxis bevat het declaratiegedeelte de declaratie van de cursor en de cursor-variabele waarin de opgehaalde gegevens worden toegewezen.
- de cursor wordt aangemaakt voor het’ SELECT ‘ – statement dat wordt gegeven in de cursor-declaratie.
- In het uitvoergedeelte wordt de opgegeven cursor geopend, opgehaald en gesloten.
Cursor attributen
zowel de impliciete cursor als de expliciete cursor heeft bepaalde attributen die toegankelijk zijn. Deze attributen geven meer informatie over de cursorbewerkingen., Hieronder staan de verschillende cursor attributen en hun gebruik.
Cursor attribuut | Description |
%FOUND | het retourneert het Booleaanse resultaat ‘TRUE’ als de meest recente fetch-operatie een record met succes heeft opgehaald, anders zal het FALSE teruggeven. |
%NOTFOUND | dit werkt tegengesteld aan %FOUND het zal ‘TRUE’ teruggeven als de meest recente fetch-bewerking geen record kon ophalen., |
%ISOPEN | het geeft Booleaans resultaat ‘ TRUE ‘terug als de gegeven cursor al geopend is, anders geeft het’ FALSE ‘ |
%ROWCOUNT | het geeft de numerieke waarde terug. Het geeft de werkelijke telling van de records die werd beïnvloed door de DML-activiteit. |
Voorbeeld 1: in dit voorbeeld gaan we kijken hoe we de expliciete cursor declareren, openen, ophalen en sluiten.
we projecteren Alle naam van de werknemer uit de emp-tabel met behulp van een cursor., We zullen ook het cursor-attribuut gebruiken om de lus in te stellen om alle record van de cursor op te halen.
uitvoer
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3
code verklaring:
- coderegel 2: declareren van de cursor guru99_det voor statement ‘select emp_name FROM emp’.
- coderegel 3: variabele Lv_emp_name declareren.
- coderegel 5: de cursor guru99_det openen.
- Code regel 6: Het basis lus statement Instellen om alle records in de ‘emp’ tabel op te halen.,
- coderegel 7: haalt de guru99_det-gegevens op en wijst de waarde toe aan lv_emp_name.
- coderegel 9: Gebruik het cursor-attribuut ‘% NOTFOUND ‘ om te achterhalen of alle record in de cursor is opgehaald. Indien opgehaald dan zal het terugkeren ‘TRUE’ en control zal verlaten van de lus, anders zal de control houden op het ophalen van de gegevens van de cursor en afdrukken van de gegevens.
- coderegel 11: EXITVOORWAARDE voor het lus statement.
- Code regel 12: druk de opgehaalde medewerkersnaam af.,
- coderegel 14: gebruik het cursor-attribuut ‘% ROWCOUNT ‘ om het totale aantal records te vinden dat werd beà nvloed/opgehaald in de cursor.
- coderegel 15: na het verlaten van de lus wordt de cursor gesloten en wordt het toegewezen geheugen vrijgemaakt.
FOR Loop Cursor statement
“FOR LOOP” statement kan worden gebruikt voor het werken met cursors. We kunnen de cursor naam in plaats van bereik limiet in de for lus statement, zodat de lus zal werken vanaf het eerste record van de cursor tot de laatste record van de cursor., De cursor variabele, openen van de cursor, ophalen en sluiten van de cursor zal impliciet worden gedaan door de for lus. gebruik:
DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
- in de bovenstaande syntaxis bevat het declaratiegedeelte de declaratie van de cursor.
- de cursor wordt aangemaakt voor het’ SELECT ‘ – statement dat wordt gegeven in de cursor-declaratie.
- in het uitvoergedeelte wordt de aangegeven cursor ingesteld in de FOR-lus en de lusvariabele ‘I’ zal zich in dit geval gedragen als cursor-variabele.,
Voorbeeld 1: in dit voorbeeld projecteren we alle naam van de werknemer uit de emp-tabel met behulp van een cursor-FOR lus.
uitvoer
Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY
code uitleg:
- coderegel 2: declareren van de cursor guru99_det voor statement ‘select emp_name FROM emp’.
- coderegel 4: construeer de lus ‘ FOR ‘ voor de cursor met de lusvariabele lv_emp_name.
- coderegel 5: de naam van de werknemer afdrukken in elke iteratie van de lus.,
- coderegel 8: verlaat de lus
opmerking: in Cursor-voor lus kunnen cursor-attributen niet worden gebruikt omdat het openen, ophalen en sluiten van de cursor impliciet wordt gedaan door FOR lus.