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: Fix: Cursor freezes, jumps or disappears in Windows 2024, Kann
Anonim

Expliziter Cursor vs impliziter Cursor

Bei Datenbanken ist ein Cursor eine Kontrollstruktur, mit der die Datensätze in einer Datenbank durchlaufen werden können. Ein Cursor bietet einen Mechanismus zum Zuweisen eines Namens zu einer SQL-Select-Anweisung und kann dann zum Bearbeiten der Informationen in dieser SQL-Anweisung verwendet werden. 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, vom Entwickler explizit definiert. In PL / SQL ist ein expliziter Cursor eine benannte Abfrage, die mit dem Schlüsselwortcursor definiert wird.

Was ist impliziter Cursor?

Implizite Cursor werden von Oracle bei jeder Ausgabe einer select-Anweisung automatisch erstellt und verwendet. Wenn ein impliziter Cursor verwendet wird, führt das Datenbankverwaltungssystem (DBMS) die Öffnungs-, Abruf- und Schließvorgänge automatisch aus. 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 jeder DML-Anweisung (Data Manipulation Language) zugeordnet, nämlich den Anweisungen INSERT, UPDATE und DELETE. 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,implizite Cursor können 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 unter Verwendung eines Namens definiert werden. Ein expliziter Cursor kann als Zeiger auf einen Satz von Datensätzen betrachtet werden, und der Zeiger kann innerhalb des Satzes von Datensätzen vorwärts bewegt werden. Explizite Cursor bieten 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. Darüber hinaus können Sie mit expliziten Cursorn eine ganze Zeile in eine PL / SQL-Datensatzvariable abrufen. Wenn Sie einen expliziten Cursor verwenden, muss dieser zuerst mit einem Namen deklariert werden. Auf Cursorattribute kann unter dem Namen des Cursors zugegriffen werden. Nach dem Deklarieren muss der Cursor zuerst geöffnet werden. Dann kann mit dem Abrufen begonnen werden. Wenn mehrere Zeilen abgerufen werden müssen, muss der Abrufvorgang innerhalb einer Schleife ausgeführt werden. Schließlich muss der Cursor geschlossen werden.

Unterschied zwischen explizitem Cursor und implizitem Cursor

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

Empfohlen: