Het is niet toegestaan om cursorvariabelen te gebruiken in de for
cursorlus (FOR i IN myCursor
). Je moet expliciet één rij per keer uit de cursorvariabele halen, met behulp van FETCH INTO
statement en regular loop statement bijvoorbeeld of gebruik FETCH BULK COLLECT INTO
om een collectie te vullen. Bijvoorbeeld:
SQL> declare
2 TYPE t_clientID_nt IS TABLE OF dual%rowtype;
3 clientID_nt t_clientID_nt;
4
5 l_cur sys_refcursor;
6
7 procedure OpenAndPopulateCursor(p_cur in out sys_refcursor) is
8 begin
9 open p_cur for
10 select *
11 from dual;
12 end;
13
14 begin
15 OpenAndPopulateCursor(l_cur);
16
17 if l_cur%isopen
18 then
19 fetch l_cur bulk collect into clientID_nt;
20 end if;
21
22 dbms_output.put_line(concat( to_char(clientID_nt.count)
23 , ' record(s) has/have been fetched.'));
24 end;
25 /
1 record(s) has/have been fetched.
PL/SQL procedure successfully completed