Oracle PL / SQL-Cursor: Implizit, Explizit, Cursor FOR-Schleife (Beispiel)

Inhaltsverzeichnis:

Anonim

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, die 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. Der Satz von Zeilen, den der Cursor enthält, wird als aktiver Satz 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 lernen Sie:

  • Impliziter Cursor
  • Expliziter Cursor
  • Cursorattribute
  • FOR-Schleifen-Cursor-Anweisung

Es gibt zwei Arten von Cursoren.

  • Impliziter Cursor
  • Expliziter Cursor

Impliziter Cursor

Immer wenn DML-Operationen in der Datenbank auftreten, 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 einer anderen Stelle des Codes aus gesteuert oder referenziert werden. Wir können nur über die Cursorattribute auf den neuesten Cursor verweisen.

Expliziter Cursor

Programmierer dürfen benannte Kontextbereiche erstellen, um ihre DML-Operationen auszuführen und mehr Kontrolle darüber zu erhalten. Der explizite Cursor sollte im Deklarationsabschnitt des PL / SQL-Blocks definiert werden und wird für die Anweisung 'SELECT' erstellt, die im Code verwendet werden muss.

Im Folgenden finden Sie Schritte zum Arbeiten mit expliziten Cursorn.

  • Cursor deklarieren

    Das Deklarieren des Cursors bedeutet einfach, einen benannten Kontextbereich für die im Deklarationsteil definierte Anweisung 'SELECT' zu erstellen. Der Name dieses Kontextbereichs entspricht dem Cursornamen.

  • Cursor öffnen

    Durch Öffnen des Cursors wird PL / SQL angewiesen, den Speicher für diesen Cursor zuzuweisen. Dadurch wird der Cursor zum Abrufen der Datensätze bereit.

  • Daten vom Cursor abrufen

    In diesem Prozess wird die Anweisung 'SELECT' ausgeführt und die abgerufenen Zeilen werden im zugewiesenen Speicher gespeichert. Diese werden jetzt als aktive Mengen bezeichnet. Das Abrufen von Daten vom Cursor ist eine Aktivität auf Datensatzebene. Dies bedeutet, dass wir Datensatz für Datensatz auf die Daten zugreifen können.

    Jede Abrufanweisung 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, jedoch keine Ausnahmen auslöst.

  • Cursor schließen

    Sobald der gesamte Datensatz abgerufen wurde, müssen wir den Cursor schließen, damit der diesem Kontextbereich zugewiesene Speicher freigegeben wird.

Syntax:

DECLARECURSOR  IS ;BEGINFOR I IN 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 Cursor-Deklaration 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 Cursor-Variable.

Beispiel 1 : In diesem Beispiel projizieren wir den gesamten Mitarbeiternamen aus der emp-Tabelle mithilfe einer Cursor-FOR-Schleife.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Ausgabe

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Code Erläuterung:

  • Codezeile 2 : Deklarieren des Cursors guru99_det für die Anweisung 'SELECT emp_name FROM 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: Verlassen 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 durch die FOR-Schleife erfolgt.