CURSOR nume_cursor [(parametru [, parametru] ...)] IS instructiune_SELECT;
unde un parametru ce apare în lista de parametri se poate folosi numai în această instrucţiune şi are forma:
nume_parametru tip_data [:= expresie]Exemplu:
DECLARE CURSOR sectii IS SELECT cod FROM sectii; CURSOR grupe(an integer) IS SELECT cod,sectia,anstudiu FROM formatii WHERE anuniv=an; BEGIN null; END;
Parcurgerea înregistrărilor dintr-un cursor se poate face astfel:
FOR variabila IN nume_cursor[(lista_parametri)] LOOP folosirea unei înregistrări curente din cursor memorată în variabila de ciclare END LOOP;
Variabila folosită în instrucţiune trebuie declarată anterior şi trebuie să fie de tipul liniilor din cursor.
Instructiunea FOR se poate folosi şi sub forma:
FOR variabila IN (instructiune_select) LOOP folosirea unei înregistrări curente din colecţia de înregistrări precizată de instrucţiunea select END LOOP;
Cursor ... is Select ... for update [of coloane] [nowait];
Dacă la folosirea cursorului nu se poate face blocarea liniilor ce se modifică, atunci:
set serveroutput on
declare
cursor stud(s char) is
select distinct st.*
from studenti st
where sectia=s order by nume,prenume;
x stud%rowtype;
begin
dbms_output.enable;
for x in stud('43') loop
dbms_output.put_line(trim(x.nume) || ' ' || trim(x.prenume));
end loop;
end;
set serveroutput on
declare
cursor stud(s char) is
select *
from studenti
where sectia=s order by nume,prenume;
x stud%rowtype;
begin
dbms_output.enable;
open stud('43');
fetch stud into x;
while stud%found loop
dbms_output.put_line(trim(x.nume) || ' ' || trim(x.prenume));
fetch stud into x;
end loop;
close stud;
end;