Unterschied zwischen explizitem Cursor und implizitem Cursor

Anonim

Expliziter Cursor gegenüber dem impliziten Cursor

Ein Cursor ist bei Datenbanken eine Kontrollstruktur, die das Durchqueren der Datensätze in einer Datenbank erlaubt. Ein Cursor bietet einen Mechanismus, um einer SQL-Select-Anweisung einen Namen zuzuweisen und dann die Informationen in dieser SQL-Anweisung zu manipulieren. Implizite Cursor werden automatisch erstellt und verwendet, wenn eine Select-Anweisung in PL / SQL ausgegeben wird, wenn kein explizit definierter Cursor vorhanden ist. Explizite Cursor, wie der Name schon sagt, werden vom Entwickler explizit definiert. In PL / SQL ist ein expliziter Cursor tatsächlich eine benannte Abfrage, die mit dem Schlüsselwortcursor definiert wird.

Was ist impliziter Cursor?

Implizite Cursor werden von Oracle jedes Mal automatisch erstellt und verwendet, wenn eine Select-Anweisung ausgegeben wird. Wenn ein impliziter Cursor verwendet wird, führt das Datenbankverwaltungssystem (Database Management System, DBMS) automatisch die Operationen Öffnen, Abrufen und Schließen 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 mit jeder DML-Anweisung (Data Manipulation Language) verknüpft, und zwar 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 NO_DATA_FOUND-Ausnahme ausgelöst werden, wenn die SQL-Anweisung keine Daten zurückgibt. Darüber hinaus können implizite Cursor TOO_MANY_ROWS-Ausnahmen auslösen, wenn die SQL-Anweisung mehr als eine Zeile zurückgibt.

Was ist der explizite Cursor?

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

Der Unterschied zwischen dem impliziten und dem expliziten Cursor besteht darin, dass ein expliziter Cursor explizit durch Angabe eines Namens definiert werden muss, während implizite Cursor automatisch erzeugt werden, wenn implizite Cursor automatisch erzeugt werden Sie geben eine select-Anweisung aus.Darüber hinaus können mehrere Zeilen mit expliziten Cursorn abgerufen werden, während implizite Cursor nur eine einzelne Zeile abrufen können. NO_DATA_FOUND- und TOO_MANY_ROWS-Ausnahmen werden nicht ausgelöst, wenn explizite Cursor verwendet werden, im Gegensatz zu impliziten Cursor. Im Wesentlichen sind implizite Cursor anfälliger für Datenfehler und bieten weniger programmatische Kontrolle als explizite Cursor. Auch implizite Cursor gelten als weniger effizient als explizite Cursor.