Когда оператор select должен возвращать ровно одну строку, тогда «SELECT INTO» - лучший подход. Да, многие разработчики предпочитают использовать курсор и извлекать только одну строку, потому что это избавляет их от «хлопот» при работе с NO_DATA_FOUND - то есть они скрывают проблему под ковром и оставляют пользователю загадочную ошибку. Я написал об этой плохой практике * недавно .
(* плохая практика, которая часто печально закреплена в стандартах проекта PL / SQL!)
Что касается подсчета и последующего запроса, то это просто удваивает работу, поэтому также следует избегать.