Перемещение EXIT
вверх.
open cur1;
loop
fetch cur1 into v_data;
EXIT WHEN cur1%NOTFOUND; --> here
dbms_output.put_line(v_data.city_id);
dbms_output.put_line(v_data.city_name);
END LOOP;
CLOSE cur1;
Или, что еще лучше, курсор пользователя FOR
loop:
begin
for v_data in (select * from ot.city_vw)
loop
dbms_output.put_line(v_data.city_id);
dbms_output.put_line(v_data.city_name);
end loop;
end;
Разве это не выглядит проще? Oracle выполняет всю работу dirty за вас (объявление переменной курсора, открытие курсора, выход из цикла, закрытие курсора). Я предлагаю вам использовать его, когда это возможно.