Если вы вызываете функцию из SQL и функция вызывает NO_DATA_FOUND, вы получаете NULL.
SQLCODE из NO_DATA_FOUND равен +100, тогда как код PL / SQL равен -1403. Ref
Положительное число не является ошибкой, и SQL не рассматривает концепцию NO_DATA_FOUND как исключение.SQL видит его как «Нет значения», что является нулевым.
create or replace function ret_dt return date is
begin
raise no_data_found;
end;
/
Elapsed: 00:00:00.26
> select rownum ,ret_dt from user_tables where rownum < 5;
ROWNUM RET_DT
--------------- -----------------
1.00
2.00
3.00
4.00
Вы, вероятно, хотите перехватить его и вернуть определенное значение, или перехватить его и вызвать исключение, определяемое пользователем (в зависимости от того, что вы хотитебывает).