for
でカーソル変数を使用することは許可されていません カーソルループ(FOR i IN myCursor
)。 FETCH INTO
を使用して、カーソル変数から一度に1行ずつ明示的にフェッチする必要があります。 たとえば、ステートメントと通常のループステートメントを使用するか、FETCH BULK COLLECT INTO
を使用します コレクションにデータを入力します。例:
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