Если вы делаете что-то вроде примера, это нормально, но вы должны помнить, чтобы избежать этой строки
CLOSE cur_nbhotels;
Это должно быть сделано другой процедурой, такой как NUMBEROFHOTELS
Кстати, вы можете использовать неявные курсоры и избегать вещей OPEN - CLOSE .Это пример для вашего кода
DECLARE
CURSOR c_stations
IS
SELECT s.region, count(*) n_region
FROM hotel h
,station s
WHERE h.categorie = '3star'
AND h.num_station = s.num_station
GROUP BY s.region;
BEGIN
<<station_loop>>
FOR r_station IN c_stations
LOOP
sys.dbms_output.put_line(r_station.region || ' ' || r_station.n_region);
END LOOP station_loop;
END;