Was ist der Cursor in Oracle
Oracle verwendet einen Arbeitsbereich namens Private SQL-Bereiche, um SQL-Anweisungen auszuführen und Informationen zu speichern. Ein Oracle-Cursor ist ein PL/SQL-Konstrukt, mit dem Sie diese Arbeitsbereiche benennen und auf ihre gespeicherten Informationen zugreifen können
Cursortypen in Oracle
- Impliziter Cursor in Oracle
- Expliziter Cursor in Oracle
Explizite Cursor
Explizite Cursor haben die folgenden Stufen
1) Deklarieren:Wir deklarieren den Namen des Cursors und definieren die Struktur der Abfrage
2) Open: Die Open-Anweisung führt die Abfrage aus und bindet jede Variable, auf die verwiesen wird. Durch die Abfrage identifizierte Zeilen werden als aktive Mengen bezeichnet. Und das steht jetzt zum Abrufen zur Verfügung
Was ist ein aktives Set: Der Satz von Zeilen, der von einer mehrzeiligen Abfrage zurückgegeben wird
Seine Größe ist die Anzahl der Zeilen, die Ihren Suchkriterien entsprechen
3) Abrufen:In dieser Phase werden Zeilen vom Cursor abgerufen, und nach jedem Abrufen testen Sie den Cursor auf verbleibende Zeilen. Wenn keine Zeilen vorhanden sind, fahren Sie mit dem Schließen des Cursors fort
4) Close:Die Close-Anweisung gibt den aktiven Satz von Zeilen frei und wir können den Cursor erneut öffnen, um den aktiven Satz zu aktualisieren
Etappen im Detail
Cursor deklarieren
- Cursorname
- Struktur der Abfrage
Syntax: CURSOR IS : It includes most of the usual clauses, but INTO Clause is not allowed Example: DECLARE CURSOR cur1 is SELECT address,salary,emp_no,emp_name FROM emp WHERE region=’US’; ……………………………… BEGIN ……………………………… END;
Öffnen eines Cursors
Hier erfolgt die Analyse und Abfrageausführung. Nach dem Öffnen des Cursors stehen die von der Abfrage zurückgegebenen Zeilen zum Abrufen zur Verfügung.
Syntax: Open <cursor name> This statement is used within the executable section of the block. It also establishes an active set of the rows Example: OPEN cur1; DECLARE v_salary number; CURSOR cur1 is SELECT salary FROM emp WHERE region=’US’; BEGIN OPEN cur1; LOOP FETCH cur1 into v_salary; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE (v_salary); END LOOP; CLOSE cur1; END; /
Der Cursor zeigt nun auf die erste Zeile im aktiven Satz.
Zeilen abrufen
Nach dem Öffnen des Cursors wird die aktuelle Zeile in Variablen geladen. Die aktuelle Zeile ist die Zeile, auf die der Cursor gerade zeigt. Der Abruf von Daten in eine PL/SQL-Variable oder einen Host
Die Variable wird durch die FETCH-Anweisung
ausgeführtSyntax: FETCH INTO ;
- Für jeden Spaltenwert, der von der dem Cursor zugeordneten Abfrage zurückgegeben wird, muss ein vorhanden sein
entsprechende Variable in der INTO-Liste.
- AUCH ihre Datentypen müssen kompatibel sein
Cursor schließen
Es schließt explizit den Cursor und ermöglicht ein erneutes Öffnen, falls erforderlich.
Syntax: CLOSE <cursor-name>; Example: CLOSE cur1 Example of Using CLOSE <Cursor Name> DECLARE v_address emp.address%TYPE; CURSOR cur1 is select address from emp; BEGIN OPEN cur1; LOOP FETCH cur1 into v_address; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_address); END LOOP; CLOSE cur1; END; /
Explizite Cursorattribute
Attribut | Typ | Beschreibung |
%ISOPEN | Boolean | Wird zu TRUE ausgewertet, wenn der Cursor geöffnet ist |
% NICHT GEFUNDEN | Boolean | Wird zu TRUE ausgewertet, wenn der letzte Abruf keine Zeile zurückgibt |
% GEFUNDEN | Boolean | Wird zu TRUE ausgewertet, wenn der letzte Abruf eine Zeile zurückgibt |
%ROWCOUNT | ZAHL | Ergibt die Gesamtzahl der bisher zurückgegebenen Zeilen |
Fortgeschrittenes Konzept mit Oracle-Cursor
Oracle Cursor und Aufzeichnungen
1)Wir haben bereits über PLSQL-Einträge gelesen.
2) Wir können die Zeilen des aktiven Satzes auch verarbeiten, indem wir Werte in einen PL/SQL-Datensatz holen
3) Wir können auch einen plsql-Datensatz basierend auf der ausgewählten Liste der Spalten in den expliziten Cursorn definieren
Beispiel
DECLARE CURSOR dept_cursor is Select deptno,dept_name FROM dept; dept_record dept_cursor%rowtype; BEGIN OPEN dept_cursor; LOOP FETCH dept_cursor INTO dept_record; Insert into dept_temp (deptno, deptname) values (dept_record.deptno, dept_record.dept_name); EXIT WHEN dept_cursor%notfound; END LOOP; Commit; CLOSE dept_cursor; END; /
Cursor mit Parametern/parametrisierter Cursor in Oracle
Syntax: CURSOR cursor_name(parameter_name datatype, ) IS Select_statement;
1) Übergeben Sie Parameterwerte an einen Cursor, wenn der Cursor geöffnet und die Abfrage ausgeführt wird
2) Öffnen Sie einen expliziten Cursor mehrmals mit jeweils unterschiedlichen aktiven Sätzen
Open cursor_name(parameter_value , ……);
Beispiel
DECLARE CURSOR cur1(v_deptno number) is Select deptname,dept_loc,dept_pincode from dept where deptno=v_deptno; Dept_record cur1%rowtype; l_deptno number:=111; BEGIN OPEN cur1(112); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; OPEN cur1(l_deptno); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; END; /
Verwandte Artikel
So arbeiten Sie mit Datum in Oracle SQL
Oracle PLSQL-Tabellen
Alles über Oracle PLSQL-Datensätze
Die 25 am häufigsten gestellten Fragen in Vorstellungsgesprächen mit Oracle PLSQL
Oracle PLSQL-Blockstruktur und Oracle PLSQL-Variable
Cursor-Attribute