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;