Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was ist ein orakelcursor

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ührt
Syntax: 
 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