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 wijzen aan een SQL-selectie-instructie en deze kan vervolgens worden gebruikt om de informatie in die SQL-instructie te manipuleren. Impliciete cursors worden automatisch gemaakt en gebruikt elke keer dat een Select-instructie wordt uitgegeven in PL / SQL, wanneer er geen expliciet gedefinieerde cursor is. Expliciete cursors, zoals de naam suggereert, worden expliciet gedefinieerd door de ontwikkelaar. In PL / SQL is een expliciete cursor eigenlijk een benoemde query die wordt gedefinieerd met behulp van de sleutelwoordcursor.
Wat is een impliciete cursor?
Impliciete cursors worden automatisch gemaakt en gebruikt door Oracle telkens wanneer een select-instructie wordt uitgegeven. Als een impliciete cursor wordt gebruikt, voert het Database Management System (DBMS) de bewerkingen voor openen, ophalen en sluiten automatisch uit. Impliciete cursors mogen alleen worden gebruikt met SQL-instructies die één 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 geassocieerd met elke DML-instructie (Data Manipulation Language), namelijk INSERT-, UPDATE- en DELETE-instructies. Ook wordt een impliciete cursor gebruikt om SELECT INTO-instructies te verwerken. Bij het ophalen van gegevens met behulp van impliciete cursors kan een NO_DATA_FOUND-uitzondering optreden wanneer de SQL-instructie geen gegevens retourneert. Verderimpliciete cursors kunnen TOO_MANY_ROWS uitzonderingen veroorzaken wanneer de SQL-instructie meer dan één rij retourneert.
Wat is een expliciete cursor?
Zoals eerder vermeld, zijn expliciete cursors zoekopdrachten die met een naam zijn gedefinieerd. Een expliciete cursor kan worden gezien als een aanwijzer naar een set records en de aanwijzer kan naar voren worden verplaatst binnen de set records. Expliciete cursors geven de gebruiker de volledige controle over het openen, sluiten en ophalen van gegevens. Ook kunnen 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. Wanneer u een expliciete cursor gebruikt, 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. Vervolgens kan het ophalen worden gestart. Als er meerdere rijen moeten worden opgehaald, moet de ophaalbewerking binnen 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-instructie 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 gegenereerd bij gebruik van expliciete cursors, in tegenstelling tot impliciete cursors. In wezen zijn impliciete cursors kwetsbaarder voor datafouten en bieden ze minder programmatische controle dan expliciete cursors. Ook worden impliciete cursors als minder efficiënt beschouwd dan expliciete cursors.