Oracle PL / SQL Cursor: Implizit, explizit, Cursor FÜR Schleife [Beispiel]
Was ist CURSOR in PL / SQL?
Ein Cursor ist ein Zeiger auf diesen Kontextbereich. Oracle erstellt einen Kontextbereich für die Verarbeitung einer SQL-Anweisung, der alle Informationen zur Anweisung enthält.
Mit PL / SQL kann der Programmierer den Kontextbereich über den Cursor steuern. Ein Cursor enthält die von der SQL-Anweisung zurückgegebenen Zeilen. Die Menge der Zeilen, die der Cursor enthält, wird als aktive Menge bezeichnet., Diese Cursor können auch so benannt werden, dass sie von einer anderen Stelle des Codes aus referenziert werden können.
In diesem Tutorial erfahren Sie –
- Impliziter Cursor
- Expliziter Cursor
- Cursorattribute
- FOR Loop Cursor statement
Der Cursor ist von zwei Typen.
- Impliziter Cursor
- Expliziter Cursor
impliziter Cursor
Wenn DML-Operationen in der Datenbank ausgeführt werden, wird ein impliziter Cursor erstellt, der die betroffenen Zeilen in dieser bestimmten Operation enthält., Diese Cursor können nicht benannt werden und können daher nicht von einem anderen Ort des Codes aus gesteuert oder referenziert werden. Wir können nur über die Cursorattribute auf den neuesten Cursor verweisen.
Explicit Cursor
Programmierer dürfen einen benannten Kontextbereich erstellen, um ihre DML-Operationen auszuführen, um mehr Kontrolle darüber zu erhalten. Der explizite Cursor sollte im Deklarationsabschnitt des PL/SQL-Blocks definiert werden und für die Anweisung ‚SELECT‘ erstellt werden, die im Code verwendet werden muss.
Unten sind Schritte, die bei der Arbeit mit expliziten Cursor beteiligt.,
- Deklarieren des Cursors
Deklarieren des Cursors bedeutet einfach, einen benannten Kontextbereich für die Anweisung ‚SELECT‘ zu erstellen, die im Deklarationsteil definiert ist. Der Name dieses Kontextbereichs entspricht dem Cursornamen.
- Öffnen des Cursors
Öffnen des Cursors weist PL/SQL an, den Speicher für diesen Cursor zuzuweisen. Dadurch ist der Cursor bereit, die Datensätze abzurufen.
- Daten vom Cursor abrufen
In diesem Prozess wird die Anweisung ‚SELECT‘ ausgeführt und die abgerufenen Zeilen im zugewiesenen Speicher gespeichert., Diese werden nun als aktive Sets bezeichnet. Das Abrufen von Daten vom Cursor ist eine Aktivität auf Datensatzebene, die bedeutet, dass wir auf die Daten Datensatz für Datensatz zugreifen können.
Jede fetch-Anweisung ruft einen aktiven Satz ab und enthält die Informationen dieses bestimmten Datensatzes. Diese Anweisung entspricht der Anweisung‘ SELECT‘, die den Datensatz abruft und der Variablen in der Klausel‘ INTO ‚ zuweist, aber keine Ausnahmen auslöst.
- Schließen des Cursors
Sobald der gesamte Datensatz jetzt abgerufen wurde, müssen wir den Cursor schließen, damit der diesem Kontextbereich zugewiesene Speicher freigegeben wird.,
Syntax:
- In der obigen Syntax enthält der Deklarationsteil die Deklaration des Cursors und der Cursorvariablen, in der die abgerufenen Daten zugewiesen werden.
- Der Cursor wird für die ‚SELECT‘ – Anweisung erstellt, die in der Cursordeklaration angegeben ist.
- Im Ausführungsteil wird der deklarierte Cursor geöffnet, abgerufen und geschlossen.
Cursorattribute
Sowohl der implizite Cursor als auch der explizite Cursor haben bestimmte Attribute, auf die zugegriffen werden kann. Diese Attribute geben mehr Informationen über die Cursoroperationen., Nachfolgend sind die verschiedenen Cursorattribute und deren Verwendung aufgeführt.
Cursorattribut | Beschreibung |
%FOUND | Es gibt das Boolesche Ergebnis ‚TRUE‘ zurück, wenn die letzte Abrufoperation einen Datensatz erfolgreich abgerufen hat, andernfalls wird FALSE zurückgegeben. |
%NOTFOUND | Dies funktioniert entgegengesetzt zu %FOUND es wird ‚TRUE‘ zurückgegeben, wenn die letzte Abrufoperation keinen Datensatz abrufen konnte., |
%ISOPEN | Es gibt das boolesche Ergebnis ‚TRUE‘ zurück, wenn der angegebene Cursor bereits geöffnet ist, andernfalls ‚FALSE‘ |
%ROWCOUNT | Es gibt den numerischen Wert zurück. Es gibt die tatsächliche Anzahl der Datensätze an, die von der DML-Aktivität betroffen sind. |
Beispiel 1: In diesem Beispiel werden wir sehen, wie der explizite Cursor deklariert, geöffnet, abgerufen und geschlossen wird.
Wir projizieren den gesamten Namen des Mitarbeiters mithilfe eines Cursors aus der EMP-Tabelle., Wir werden auch das Cursor-Attribut verwenden, um die Schleife festzulegen, um den gesamten Datensatz vom Cursor abzurufen.
Output
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3
Code Erklärung:
- Code linie 2: Deklarieren die cursor guru99_det für anweisung ‚WÄHLEN emp_name VON emp‘.
- Codezeile 3: Deklarieren der Variablen lv_emp_name.
- Codezeile 5: Öffnen des Cursors guru99_det.
- Codezeile 6: Setzen der Basic-loop-Anweisung, um alle Datensätze in der ‚emp‘ – Tabelle abzurufen.,
- Codezeile 7: Ruft die guru99_det-Daten ab und weist den Wert lv_emp_name zu.
- Codezeile 9: Mit dem Cursor-Attribut ‚%NOTFOUND ‚ ermitteln Sie, ob der gesamte Datensatz im Cursor abgerufen wird. Wenn es abgerufen wird, gibt es ‚TRUE‘ zurück und das Steuerelement wird aus der Schleife beendet, andernfalls ruft das Steuerelement die Daten weiterhin vom Cursor ab und druckt die Daten aus.
- Codezeile 11: EXIT-Bedingung für die loop-Anweisung.
- Codezeile 12: Drucken Sie den abgerufenen Mitarbeiternamen.,
- Codezeile 14: Verwenden Sie das Cursor-Attribut ‚%ROWCOUNT‘, um die Gesamtzahl der Datensätze zu ermitteln, die im Cursor betroffen/abgerufen wurden.
- Codezeile 15: Nach dem Beenden der Schleife wird der Cursor geschlossen und der zugewiesene Speicher freigegeben.
FOR Loop Cursor statement
Die Anweisung „FOR LOOP“ kann für die Arbeit mit Cursors verwendet werden. Wir können den Cursornamen anstelle des Bereichslimits in der FOR-loop-Anweisung angeben, damit die Schleife vom ersten Datensatz des Cursors bis zum letzten Datensatz des Cursors funktioniert., Die Cursorvariable, das Öffnen des Cursors, das Abrufen und Schließen des Cursors erfolgt implizit durch die FOR Schleife.
Syntax:
DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
- In der obigen Syntax enthält der Deklarationsteil die Deklaration des Cursors.
- Der Cursor wird für die ‚SELECT‘ – Anweisung erstellt, die in der Cursordeklaration angegeben ist.
- Im Ausführungsteil wird der deklarierte Cursor in der FOR-Schleife eingerichtet und die Schleifenvariable ‚I‘ verhält sich in diesem Fall als Cursorvariable.,
Beispiel 1: In diesem Beispiel projizieren wir den gesamten Mitarbeiternamen aus der emp-Tabelle mithilfe einer Cursor-FOR-Schleife.
Ausgabe
Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY
Code Erklärung:
- Code linie 2: Deklarieren der cursor guru99_det für anweisung ‚WÄHLEN emp_name VON emp‘.
- Codezeile 4: Erstellen der‘ FOR ‚ – Schleife für den Cursor mit der Schleifenvariablen lv_emp_name.
- Codezeile 5: Drucken des Mitarbeiternamens in jeder Iteration der Schleife.,
- Codezeile 8: Beenden Sie die Schleife
Hinweis: In der Cursor-FOR-Schleife können Cursorattribute nicht verwendet werden, da das Öffnen, Abrufen und Schließen des Cursors implizit erfolgt FOR Schleife.