Это курсор, который использует параметр.
Используйте его при необходимости;если для курсора не нужен параметр, не используйте его (и наоборот). Одним из возможных применений будет вложенный курсорный цикл. Основываясь на схеме Скотта, я сначала выбираю отделы (в цикле курсора FOR), а затем перебираю всех сотрудников (используя явный курсор), принадлежащих этому отделу, который передается в качестве параметра:
SQL> declare
2 cursor c1 (par_deptno in number) is --> PAR_DEPTNO is cursor's parameter
3 select ename
4 from emp
5 where deptno = par_deptno;
6 c1r c1%rowtype;
7 begin
8 for cur_d in (select deptno, dname from dept) loop
9 dbms_output.put_line('Dept. ' || cur_d.dname);
10 dbms_output.put_line(' List of Employees:');
11
12 open c1 (cur_d.deptno); --> when opening the cursor, pass parameter's value
13 loop
14 fetch c1 into c1r;
15 exit when c1%notfound;
16
17 dbms_output.put_line(' - ' || c1r.ename);
18 end loop;
19 close c1;
20 end loop;
21 end;
22 /
Dept. ACCOUNTING
List of Employees:
- CLARK
- KING
- MILLER
Dept. RESEARCH
List of Employees:
- SMITH
- JONES
- SCOTT
- ADAMS
- FORD
Dept. SALES
List of Employees:
- ALLEN
- WARD
- MARTIN
- BLAKE
- TURNER
- JAMES
Dept. OPERATIONS
List of Employees:
PL/SQL procedure successfully completed.
SQL>
Дополнительная информация в документации ( Явный курсор ).