Unterschied zwischen explizitem Cursor und implizitem Cursor

Unterschied zwischen explizitem Cursor und implizitem Cursor
Unterschied zwischen explizitem Cursor und implizitem Cursor

Video: Unterschied zwischen explizitem Cursor und implizitem Cursor

Video: Unterschied zwischen explizitem Cursor und implizitem Cursor
Video: Scrum vs. Wasserfall: Ist agiles Projektmanagement immer besser? 🤔 2024, Juli
Anonim

Expliziter Cursor vs. impliziter Cursor

Wenn es um Datenbanken geht, ist ein Cursor eine Kontrollstruktur, die das Durchlaufen der Datensätze in einer Datenbank ermöglicht. Ein Cursor bietet einen Mechanismus, um einer SQL-Select-Anweisung einen Namen zuzuweisen, und kann dann verwendet werden, um die Informationen innerhalb dieser SQL-Anweisung zu manipulieren. Implizite Cursor werden automatisch erstellt und jedes Mal verwendet, wenn eine Select-Anweisung in PL/SQL ausgegeben wird, wenn kein explizit definierter Cursor vorhanden ist. Explizite Cursor werden, wie der Name schon sagt, explizit vom Entwickler definiert. In PL/SQL ist ein expliziter Cursor eigentlich eine benannte Abfrage, die mit dem Schlüsselwort Cursor definiert wird.

Was ist ein impliziter Cursor?

Implizite Cursor werden jedes Mal automatisch erstellt und von Oracle verwendet, wenn eine select-Anweisung ausgegeben wird. Wenn ein impliziter Cursor verwendet wird, führt das Datenbankverw altungssystem (DBMS) die Operationen zum Öffnen, Abrufen und Schließen automatisch durch. Implizite Cursor sollten nur mit SQL-Anweisungen verwendet werden, die eine einzelne Zeile zurückgeben. Wenn die SQL-Anweisung mehr als eine Zeile zurückgibt, führt die Verwendung eines impliziten Cursors zu einem Fehler. Ein impliziter Cursor wird automatisch allen Data Manipulation Language (DML)-Anweisungen zugeordnet, nämlich den INSERT-, UPDATE- und DELETE-Anweisungen. Außerdem wird ein impliziter Cursor verwendet, um SELECT INTO-Anweisungen zu verarbeiten. Beim Abrufen von Daten mit impliziten Cursorn kann die Ausnahme NO_DATA_FOUND ausgelöst werden, wenn die SQL-Anweisung keine Daten zurückgibt. Außerdem können implizite Cursor TOO_MANY_ROWS Ausnahmen auslösen, wenn die SQL-Anweisung mehr als eine Zeile zurückgibt.

Was ist ein expliziter Cursor?

Wie bereits erwähnt, sind explizite Cursor Abfragen, die über einen Namen definiert werden. Ein expliziter Cursor kann als Zeiger auf eine Menge von Datensätzen betrachtet werden, und der Zeiger kann innerhalb der Menge von Datensätzen vorwärts bewegt werden. Explizite Cursor geben dem Benutzer die vollständige Kontrolle über das Öffnen, Schließen und Abrufen von Daten. Außerdem können mehrere Zeilen mit einem expliziten Cursor abgerufen werden. Explizite Cursor können ebenso wie jede Funktion oder Prozedur Parameter annehmen, sodass die Variablen im Cursor bei jeder Ausführung geändert werden können. Außerdem können Sie mit expliziten Cursorn eine ganze Zeile in eine PL/SQL-Datensatzvariable holen. Wenn Sie einen expliziten Cursor verwenden, muss er zuerst mit einem Namen deklariert werden. Auf Cursorattribute kann unter Verwendung des dem Cursor gegebenen Namens zugegriffen werden. Nach der Deklaration muss zuerst der Cursor geöffnet werden. Dann kann das Holen gestartet werden. Wenn mehrere Zeilen abgerufen werden müssen, muss der Abrufvorgang innerhalb einer Schleife ausgeführt werden. Abschließend muss der Cursor geschlossen werden.

Unterschied zwischen explizitem und implizitem Cursor

Der Hauptunterschied zwischen dem impliziten Cursor und dem expliziten Cursor besteht darin, dass ein expliziter Cursor explizit definiert werden muss, indem ein Name angegeben wird, während implizite Cursor automatisch erstellt werden, wenn Sie eine select-Anweisung absetzen. Darüber hinaus können mehrere Zeilen mit expliziten Cursorn abgerufen werden, während implizite Cursor nur eine einzelne Zeile abrufen können. Auch die Ausnahmen NO_DATA_FOUND und TOO_MANY_ROWS werden nicht ausgelöst, wenn explizite Cursor verwendet werden, im Gegensatz zu impliziten Cursorn. Im Wesentlichen sind implizite Cursor anfälliger für Datenfehler und bieten weniger programmatische Kontrolle als explizite Cursor. Außerdem gelten implizite Cursor als weniger effizient als explizite Cursor.

Empfohlen: