Oracle
 sql >> Database >  >> RDS >> Oracle

Cos'è il cursore in Oracle

Cos'è il cursore in Oracle

Oracle Utilizza un'area di lavoro denominata Aree SQL private per eseguire istruzioni SQL e memorizzare informazioni. Un cursore Oracle è un costrutto PL/SQL che consente di assegnare un nome a queste aree di lavoro e di accedere alle informazioni archiviate

Tipi di cursore in Oracle

  • Cursore implicito in Oracle
  • Cursore esplicito in Oracle

Cursori espliciti

I cursori espliciti hanno le seguenti fasi

1) Dichiara:dichiariamo il nome del cursore e definiamo la struttura della query

2) Open: l'istruzione open esegue la query e associa qualsiasi variabile a cui si fa riferimento. Le righe identificate dalla query sono denominate insiemi attivi. E ora è disponibile per il recupero

Cos'è il set attivo: L'insieme di righe restituito da una query a più righe

La sua dimensione è il numero di righe che soddisfa i tuoi criteri di ricerca

3) Recupero:in questa fase, le righe vengono recuperate dal cursore e, dopo ogni recupero, si testa il cursore per eventuali righe rimanenti, se non ci sono righe si procede alla chiusura del cursore

4) Close:l'istruzione close rilascia l'insieme di righe attivo e possiamo di nuovo aprire il cursore per recuperare l'aggiornamento dell'insieme attivo

Le fasi in dettaglio

Dichiarazione di un cursore

  • Nome cursore
  • Struttura della query
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;

Apertura di un cursore

Qui viene eseguita l'analisi e l'esecuzione della query. Dopo aver aperto il cursore, le righe restituite dalla query sono disponibili per il recupero.

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;
 /

Il cursore punterà ora alla prima riga del set attivo.

Recupero delle righe

Dopo che il cursore è stato aperto, la riga corrente viene caricata nelle variabili. La riga corrente è la riga su cui punta il cursore Il recupero dei dati nella variabile PL/SQL o nell'host

La variabile viene eseguita tramite l'istruzione FETCH

Syntax: 
 FETCH  INTO ;
  • Per ogni valore di colonna restituito dalla query associata al cursore, deve esserci un

variabile corrispondente nell'elenco INTO.

  • INOLTRE i loro tipi di dati devono essere compatibili

CHIUDERE UN CURSORE

Chiude esplicitamente il cursore, consentendone la riapertura, se necessario.

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;
 /

Attributi espliciti del cursore

Attributo Digita Descrizione
%ISOPEN Booleano Valuta TRUE se il cursore è aperto
%NOTFOUND Booleano Valuta su TRUE se il recupero più recente non restituisce una riga
%TROVATO Booleano Valuta su TRUE se il recupero più recente restituisce una riga
%ROWCOUNT NUMERO Valuta il numero totale di righe restituite finora

Concetto avanzato con il cursore Oracle

Cursore e record Oracle

1) Abbiamo già letto dei record PLSQL.

2) Possiamo elaborare le righe del set attivo anche recuperando i valori in un record PL/SQL

3) Possiamo anche definire un record plsql in base all'elenco selezionato delle colonne anche nei cursori espliciti

Esempio

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;
 /

Cursore con parametri/cursore parametrizzato in Oracle

Syntax: 
 CURSOR cursor_name(parameter_name datatype,  )
 IS
 Select_statement;

1) Passa i valori dei parametri a un cursore quando il cursore viene aperto e la query viene eseguita

2) Aprire un cursore esplicito più volte con diversi insiemi attivi ogni volta

Open cursor_name(parameter_value , ……);

Esempio

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;
 /

 Articoli correlati

Come utilizzare la data in Oracle sql
Tabelle Oracle PLSQL
Tutto sui record Oracle PLSQL
25 domande più frequenti per interviste Oracle plsql
Struttura a blocchi Oracle PLSQL e variabile Oracle PLSQL
Attributi del cursore