У меня есть следующий код:PLSQL «ошибка Курсор уже открыт»
DECLARE
f_cd fee.fee_cd%type;
f_name fee.fee_nm%type;
f_new_cd fee.new_fee_cd%type;
f_new_name fee.new_fee_nm%type;
Cursor cur is
SELECT Fee_cd, fee_nm, new_fee_cd, new_fee_nm FROM Fee;
BEGIN
if cur%ISOPEN then
close cur;
end if;
open cur;
for rec in cur loop
fetch cur INTO f_cd, f_name, f_new_cd, f_new_name;
dbms_output.put_line ('The Fee Code ' || f_cd
|| ' is the one you selected and it''s name is '
|| f_name);
end loop;
close cur;
END;
Но я получаю сообщение об ошибке
Причина: Была сделана попытка открыть курсор, который был уже открыт ,
Действие: Закрыть курсор сначала перед повторным открытием.
Я не знаю, что происходит. Когда я изменяю код, чтобы отнять for loop
и использовать только структуру loop... end loop
, он работает. Функциональный код ниже:
loop
fetch cur INTO f_cd, f_name, f_new_cd, f_new_name;
dbms_output.put_line ('The Fee Code ' || f_cd
|| ' is the one you selected and it''s name is '
|| f_name);
exit when cur%notfound;
end loop;
close cur;
END;
Почему, когда я использую цикл for, это говорит мне, что курсор уже открыт?