refカーソルはカーソルのようなforループで使用できますか? つまり好き
for i in cur_name
loop
dbms_output.put_line(i.column_name)
end loop;
もし不可能なら、なぜですか?
refカーソルはカーソルのようなforループで使用できますか? つまり好き
for i in cur_name
loop
dbms_output.put_line(i.column_name)
end loop;
もし不可能なら、なぜですか?
for
に対して行うのと同じようにループを使用することはできませんimplicit/explicit cursors
declare
ref_cur sys_refcursor;
BEGIN
OPEN ref_cur FOR SELECT table_name FROM all_tables WHERE ROWNUM < 5;
for i in ref_cur loop
dbms_output.put_line(i.table_name);
end loop;
END;
/
エラーが発生します
PLS-00221: 'REF_CUR'はプロシージャではないか、未定義です
は、開いているカーソルを out 引数としてクライアント アプリに送信してレコードをループするために使用される へのref cursor
ポインタです。
ループスルーしたい場合は、open cursor
declare
ref_cur sys_refcursor;
v_name all_tables.table_name%TYPE;
BEGIN
OPEN ref_cur FOR SELECT table_name FROM all_tables WHERE ROWNUM < 5;
LOOP
FETCH ref_cur INTO v_name;
exit when ref_cur%notfound;
dbms_output.put_line(v_name);
end loop;
END;
/
implicit/explicit cursors
カーソルの寿命が*block*
declare
cursor cur IS SELECT table_name FROM all_tables WHERE ROWNUM < 5;
BEGIN
for i in cur loop
dbms_output.put_line(i.table_name);
end loop;
END;
/
また
BEGIN
for i in (SELECT table_name FROM all_tables WHERE ROWNUM < 5) loop
dbms_output.put_line(i.table_name);
end loop;
END;
/