PL / SQL – Cursor
In diesem Kapitel werden die Cursor in PL / SQL erläutert. Oracle erstellt einen Speicherbereich, den so genannten Kontextbereich, für die Verarbeitung einer SQL-Anweisung, der alle für die Verarbeitung der Anweisung erforderlichen Informationen enthält. Beispiel: Anzahl der verarbeiteten Zeilen usw.
Ein Cursor ist ein Zeiger auf diesen Kontextbereich. PL / SQL steuert den Kontextbereich über einen Cursor. Ein Cursor enthält die Zeilen (eine oder mehrere), die von einer SQL-Anweisung zurückgegeben werden. Die Reihe von Zeilen, die der Cursor enthält, wird als aktive Menge bezeichnet.
Sie können einen Cursor so benennen, dass er in einem Programm zum Abrufen und Verarbeiten der von der SQL-Anweisung zurückgegebenen Zeilen verwendet werden kann zu einer Zeit. Es gibt zwei Arten von Cursorn:
- Implizite Cursor
- Explizite Cursor
Implizite Cursor
Implizite Cursor werden von Oracle automatisch erstellt, wenn eine SQL-Anweisung ausgeführt wird und kein expliziter Cursor für die Anweisung vorhanden ist. Programmierer können die impliziten Cursor und die darin enthaltenen Informationen nicht steuern.
Immer wenn eine DML-Anweisung (INSERT, UPDATE und DELETE) ausgegeben wird, ist dieser Anweisung ein impliziter Cursor zugeordnet. Bei INSERT-Operationen enthält der Cursor die Daten, die eingefügt werden müssen. Bei UPDATE- und DELETE-Operationen identifiziert der Cursor die betroffenen Zeilen.
In PL / SQL können Sie den neuesten impliziten Cursor als SQL-Cursor bezeichnen, der immer Attribute wie% FOUND aufweist ,% ISOPEN,% NOTFOUND und% ROWCOUNT. Der SQL-Cursor verfügt über zusätzliche Attribute,% BULK_ROWCOUNT und% BULK_EXCEPTIONS, die für die Verwendung mit der FORALL-Anweisung vorgesehen sind. Die folgende Tabelle enthält die Beschreibung der am häufigsten verwendeten Attribute –
S.No | Attribut & Beschreibung |
---|---|
1 |
% FOUND Gibt TRUE zurück, wenn eine INSERT-, UPDATE- oder DELETE-Anweisung eine oder mehrere Zeilen betroffen hat oder eine SELECT INTO-Anweisung eine oder mehrere Zeilen zurückgegeben hat. Andernfalls wird FALSE zurückgegeben. |
2 |
% NOTFOUND Das logische Gegenteil von% FOUND. Es gibt TRUE zurück, wenn eine INSERT-, UPDATE- oder DELETE-Anweisung keine Zeilen beeinflusst hat oder eine SELECT INTO-Anweisung keine Zeilen zurückgegeben hat. Andernfalls wird FALSE zurückgegeben. |
3 |
% ISOPEN Gibt für implizite Cursor immer FALSE zurück, da Oracle den SQL-Cursor nach Ausführung der zugehörigen SQL-Anweisung automatisch schließt. |
4 |
% ROWCOUNT Gibt die Anzahl der Zeilen zurück, die von einer INSERT-, UPDATE- oder DELETE-Anweisung betroffen sind oder von einer SELECT INTO-Anweisung zurückgegeben werden. |
Auf jedes SQL-Cursorattribut wird als SQL% -Attributname zugegriffen, wie unten im Beispiel gezeigt.
Beispiel
Wir werden die CUSTOMERS-Tabelle verwenden, die wir in den vorherigen Kapiteln erstellt und verwendet haben.
Das folgende Programm aktualisiert die Tabelle und erhöht das Gehalt jedes Kunden um 500 und verwendet SQL% ROWCOUNT-Attribut zum Bestimmen der Anzahl der betroffenen Zeilen –
Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis ausgegeben:
6 customers selected PL/SQL procedure successfully completed.
Wenn Sie die Datensätze in der Kundentabelle überprüfen, werden Sie feststellen, dass die Zeilen aktualisiert wurden –
Explizite Cursor
Explizite Cursor sind vom Programmierer definierte Cursor, um mehr Kontrolle darüber zu erlangen der Kontextbereich. Ein expliziter Cursor sollte im Deklarationsabschnitt des PL / SQL-Blocks definiert werden. Es wird in einer SELECT-Anweisung erstellt, die mehr als eine Zeile zurückgibt.
Die Syntax zum Erstellen eines expliziten Cursors lautet –
CURSOR cursor_name IS select_statement;
Working mit einem expliziten Cursor umfasst die folgenden Schritte:
- Deklarieren des Cursors zum Initialisieren des Speichers
- Öffnen des Cursors zum Zuweisen des Speichers
- Abrufen des Cursors zum Abrufen der Daten
- Schließen des Cursors zum Freigeben des zugewiesenen Speichers
Deklarieren des Cursors
Das Deklarieren des Cursors definiert den Cursor mit einem Namen und die zugehörige SELECT-Anweisung. Beispiel:
CURSOR c_customers IS SELECT id, name, address FROM customers;
Öffnen des Cursors
Durch Öffnen des Cursors wird der Speicher für den Cursor reserviert und das Abrufen der zurückgegebenen Zeilen vorbereitet durch die SQL-Anweisung hinein. Zum Beispiel öffnen wir den oben definierten Cursor wie folgt:
OPEN c_customers;
Abrufen des Cursors
Zum Abrufen des Cursors muss auf eine Zeile bei zugegriffen werden eine Zeit. Zum Beispiel werden wir Zeilen vom oben geöffneten Cursor wie folgt abrufen:
FETCH c_customers INTO c_id, c_name, c_addr;
Schließen des Cursors
Das Schließen des Cursors bedeutet das Freigeben der zugewiesene Speicher.Zum Beispiel schließen wir den oben geöffneten Cursor wie folgt:
CLOSE c_customers;
Beispiel
Das folgende Beispiel veranschaulicht die Konzepte von expliziten Cursorn & minua;
Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis erzeugt:
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.