Expliciete cursor versus impliciete cursor
Als het om databases gaat, is een cursor een besturingsstructuur waarmee u door de records in een database kunt bladeren. Een cursor biedt een mechanisme om een naam toe te kennen aan een SQL-select-instructie en kan vervolgens worden gebruikt om de informatie in die SQL-instructie te manipuleren. Impliciete cursors worden automatisch gemaakt en gebruikt telkens wanneer een Select-instructie wordt uitgegeven in PL/SQL, wanneer er geen expliciet gedefinieerde cursor is. Expliciete cursors, zoals de naam al doet vermoeden, worden expliciet gedefinieerd door de ontwikkelaar. In PL/SQL is een expliciete cursor eigenlijk een benoemde query die is gedefinieerd met behulp van de sleutelwoordcursor.
Wat is een impliciete cursor?
Impliciete cursors worden automatisch gemaakt en gebruikt door Oracle telkens wanneer een select-statement wordt uitgegeven. Als een impliciete cursor wordt gebruikt, voert het Database Management System (DBMS) automatisch de bewerkingen voor openen, ophalen en sluiten uit. Impliciete cursors mogen alleen worden gebruikt met SQL-instructies die een enkele rij retourneren. Als de SQL-instructie meer dan één rij retourneert, zal het gebruik van een impliciete cursor een fout introduceren. Een impliciete cursor wordt automatisch gekoppeld aan elke Data Manipulation Language (DML)-statement, namelijk INSERT-, UPDATE- en DELETE-statements. Er wordt ook een impliciete cursor gebruikt om SELECT INTO-instructies te verwerken. Bij het ophalen van gegevens met behulp van impliciete cursors kan de NO_DATA_FOUND-uitzondering optreden wanneer de SQL-instructie geen gegevens retourneert. Bovendien kunnen impliciete cursors TOO_MANY_ROWS uitzonderingen opleveren wanneer de SQL-instructie meer dan één rij retourneert.
Wat is een expliciete cursor?
Zoals eerder vermeld, zijn expliciete cursors zoekopdrachten die zijn gedefinieerd met een naam. Een expliciete cursor kan worden gezien als een aanwijzer naar een reeks records en de aanwijzer kan naar voren worden bewogen binnen de reeks records. Expliciete cursors geven de gebruiker de volledige controle over het openen, sluiten en ophalen van gegevens. Er kunnen ook meerdere rijen worden opgehaald met een expliciete cursor. Expliciete cursors kunnen ook parameters aannemen, net als elke functie of procedure, zodat de variabelen in de cursor elke keer dat deze wordt uitgevoerd kunnen worden gewijzigd. Bovendien kunt u met expliciete cursors een hele rij ophalen in een PL/SQL-recordvariabele. Bij gebruik van een expliciete cursor, moet deze eerst worden gedeclareerd met een naam. Cursorattributen zijn toegankelijk met de naam die aan de cursor is gegeven. Na het declareren moet de cursor eerst worden geopend. Daarna kan het ophalen worden gestart. Als er meerdere rijen moeten worden opgehaald, moet de ophaalbewerking in een lus worden uitgevoerd. Ten slotte moet de cursor worden gesloten.
Verschil tussen expliciete cursor en impliciete cursor
Het belangrijkste verschil tussen de impliciete cursor en de expliciete cursor is dat een expliciete cursor expliciet moet worden gedefinieerd door een naam op te geven, terwijl impliciete cursors automatisch worden gemaakt wanneer u een select-statement geeft. Bovendien kunnen meerdere rijen worden opgehaald met behulp van expliciete cursors, terwijl impliciete cursors slechts één rij kunnen ophalen. Ook NO_DATA_FOUND en TOO_MANY_ROWS uitzonderingen worden niet verhoogd bij het gebruik van expliciete cursors, in tegenstelling tot impliciete cursors. In wezen zijn impliciete cursors kwetsbaarder voor gegevensfouten en bieden ze minder programmatische controle dan expliciete cursors. Ook worden impliciete cursors als minder efficiënt beschouwd dan expliciete cursors.