Но нам все еще нужно ответить на вопрос «почему возникает исключение в случае, когда SELECT не имеет данных для извлечения».
Я считаю, что это сделано, потому что это обычная ситуация, которую в противном случае можно было бы упустить из виду. Написание кода так, как будто он всегда ожидает найти данные, является обычным делом, и если мы должны были включить проверку ошибок, такую как
SELECT <something...>
IF SQLCODE = 100 THEN -- No data found
<no-data handler>
END IF
вполне вероятно, что ИМХО проверка на SQLCODE = 100 будет часто пропускаться. Возникновение исключения приводит к тому, что A) произошло важное условие (данные не найдены), и B) НИКАКОЕ ПРЕДОСТАВЛЕНИЕ НЕ СДЕЛАНО ДЛЯ ЭТОГО. IMO, использующий механизм PL / SQL, вызывает исключение лучше, чем программа, продолжающая весело продолжать свой путь, исходя из предположения, что данные были извлечены, хотя на самом деле это не так, что может привести к всевозможным, кроме веселых, проблемам.
Делись и наслаждайся.