Anda tampaknya memiliki kursor eksplisit yang membingungkan, mis.:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
dengan kursor ref - yang merupakan penunjuk ke kursor terbuka.
Anda biasanya akan menggunakan kursor ref untuk membuka kursor di db dan meneruskannya kembali ke aplikasi pemanggil untuk mengulangnya.
Cara Anda mendeklarasikan kursor ref sebagai parameter keluar dan kemudian mencoba mengulanginya dalam prosedur yang sama tidak masuk akal - setelah Anda mengambil catatan dari kursor, Anda tidak dapat mengambilnya kembali.
Jika Anda benar-benar harus mengulang kursor ref, Anda akan menggunakan sintaks semacam ini:
declare
cur sys_refcursor;
rec dual%rowtype;
begin
open cur for select dummy from dual;
loop
fetch cur into rec;
exit when cur%notfound;
dbms_output.put_line(rec.dummy);
end loop;
end;
/
tetapi seperti yang saya katakan, secara umum, Anda tidak akan mengulang kursor ref di db, Anda akan melakukannya di kode panggilan.
Mungkin jika Anda memperbarui pertanyaan Anda dengan persyaratan yang ingin Anda penuhi, kami dapat menyarankan cara yang lebih baik untuk melakukannya.