PL / SQL – Cursors
In dit hoofdstuk zullen we de cursors in PL / SQL bespreken. Oracle creëert een geheugengebied, bekend als het contextgebied, voor het verwerken van een SQL-instructie, die alle informatie bevat die nodig is voor het verwerken van de instructie; bijvoorbeeld het aantal verwerkte rijen, enz.
Een cursor is een aanwijzer naar dit contextgebied. PL / SQL bestuurt het contextgebied door middel van een cursor. Een cursor bevat de rijen (een of meer) die worden geretourneerd door een SQL-instructie. De set rijen die de cursor bevat, wordt de actieve set genoemd.
U kunt een cursor een naam geven zodat er in een programma naar kan worden verwezen om de rijen op te halen en te verwerken die worden geretourneerd door de SQL-instructie, een tegelijk. Er zijn twee soorten cursors –
- Impliciete cursors
- Expliciete cursors
Impliciete cursors
Impliciete cursors worden automatisch door Oracle aangemaakt wanneer een SQL-instructie wordt uitgevoerd, als er geen expliciete cursor voor de instructie is. Programmeurs hebben geen controle over de impliciete cursors en de informatie erin.
Telkens wanneer een DML-instructie (INSERT, UPDATE en DELETE) wordt uitgegeven, wordt een impliciete cursor aan deze instructie gekoppeld. Voor INSERT-bewerkingen bevat de cursor de gegevens die moeten worden ingevoegd. Voor UPDATE- en DELETE-bewerkingen identificeert de cursor de rijen die zouden worden beïnvloed.
In PL / SQL kunt u naar de meest recente impliciete cursor verwijzen als de SQL-cursor, die altijd attributen heeft zoals% FOUND ,% ISOPEN,% NOTFOUND en% ROWCOUNT. De SQL-cursor heeft extra attributen,% BULK_ROWCOUNT en% BULK_EXCEPTIONS, ontworpen voor gebruik met de FORALL-instructie. De volgende tabel geeft de beschrijving van de meest gebruikte attributen –
S.No | Kenmerk & Beschrijving |
---|---|
1 |
% FOUND Geeft als resultaat TRUE als een INSERT-, UPDATE- of DELETE-instructie een of meer rijen beïnvloedde of een SELECT INTO-instructie een of meer rijen retourneerde. Anders retourneert het FALSE. |
2 |
% NOTFOUND Het logische tegenovergestelde van% FOUND. Het retourneert WAAR als een INSERT-, UPDATE- of DELETE-instructie geen rijen beïnvloedde, of een SELECT INTO-instructie geen rijen retourneerde. Anders retourneert het FALSE. |
3 |
% ISOPEN Geeft altijd FALSE terug voor impliciete cursors, omdat Oracle de SQL-cursor automatisch sluit na het uitvoeren van de bijbehorende SQL-instructie. |
4 |
% ROWCOUNT Geeft het aantal rijen terug dat wordt beïnvloed door een INSERT-, UPDATE- of DELETE-instructie, of geretourneerd door een SELECT INTO-instructie. |
Elk SQL-cursorattribuut wordt benaderd als sql% attribute_name, zoals hieronder in het voorbeeld wordt getoond.
Voorbeeld
We zullen de tabel KLANTEN gebruiken die we in de vorige hoofdstukken hadden gemaakt en gebruikt.
Het volgende programma zal de tabel bijwerken en het salaris van elke klant met 500 verhogen en de SQL% gebruiken ROWCOUNT-attribuut om het aantal betrokken rijen te bepalen –
Wanneer de bovenstaande code wordt uitgevoerd bij de SQL-prompt, levert dit het volgende resultaat op –
6 customers selected PL/SQL procedure successfully completed.
Als u de records in de klantentabel controleert, zult u zien dat de rijen zijn bijgewerkt –
Expliciete cursors
Expliciete cursors zijn door de programmeur gedefinieerde cursors om meer controle te krijgen over het contextgebied. Een expliciete cursor moet worden gedefinieerd in het declaratiegedeelte van het PL / SQL-blok. Het is gemaakt op een SELECT-instructie die meer dan één rij retourneert.
De syntaxis voor het maken van een expliciete cursor is –
CURSOR cursor_name IS select_statement;
Werken met een expliciete cursor omvat de volgende stappen:
- De cursor declareren voor het initialiseren van het geheugen
- De cursor openen om het geheugen toe te wijzen
- De cursor ophalen voor het ophalen van de gegevens
- Het sluiten van de cursor om het toegewezen geheugen vrij te geven
Declaratie van de cursor
Het declareren van de cursor definieert de cursor met een naam en de bijbehorende SELECT-instructie. Bijvoorbeeld –
CURSOR c_customers IS SELECT id, name, address FROM customers;
De cursor openen
Door de cursor te openen, wordt het geheugen voor de cursor toegewezen en is deze klaar voor het ophalen van de geretourneerde rijen door de SQL-instructie erin. We openen bijvoorbeeld de hierboven gedefinieerde cursor als volgt –
OPEN c_customers;
De cursor ophalen
Het ophalen van de cursor houdt in dat u één rij op een tijd. We halen bijvoorbeeld rijen op van de hierboven geopende cursor als volgt –
FETCH c_customers INTO c_id, c_name, c_addr;
De cursor sluiten
De cursor sluiten betekent loslaten het toegewezen geheugen.We zullen bijvoorbeeld de hierboven geopende cursor als volgt sluiten –
CLOSE c_customers;
Voorbeeld
Hieronder volgt een compleet voorbeeld om de concepten te illustreren van expliciete cursors & minua;
Wanneer de bovenstaande code wordt uitgevoerd bij de SQL-prompt, levert dit het volgende resultaat op –
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.